当前位置: 首页 > 编程语言 > C#

如何从ClaimsPrincipal中删除ClaimsIdentity分享

时间:2023-04-11 01:06:25 C#

C#学习教程:如何从ClaimsPrincipal中删除ClaimsIdentity这些区域代表系统中可以执行不同任务的不同类型的用户。由于涉及遗留数据库,每种用户类型的信息都存储在不同的表中。此外,为每个用户类型存储的信息类型不同,因此表是分开的。我想实现基于声明的身份验证有几个原因:第一,在客户端上存储每个用户的详细信息(如用户名、角色等)更容易。另一个原因是ClaimsPrincipal支持多重身份。这一点很重要,因为在某些情况下,一个人可能需要同时以多个身份访问系统。例如。经理需要访问系统以执行管理任务,但经理也恰好是员工,应该能够以员工身份登录系统。每个区域都是单独处理的,所以即使用户既是管理员又是员工,他们也必须分别登录到每个区域。所以这是我的问题:是否可以通过ClaimsPrincipal获得多个身份?我还有别的把戏吗?如果您使用多个身份,您如何将用户从一个区域注销,但如果他们碰巧同时登录,又如何让他们登录到另一个区域?通常,要注销,代码如下所示:FederatedAuthentication.SessionAuthenticationModule.SignOut();我的假设是这将使用户退出这两个区域。这是对的吗?假设是这种情况,我想我可以简单地从ClaimsPrincipal中删除特定的身份,然后重置并写入SessionSecurityToken,但是ClaimsPrincipal没有删除方法,只有AddIdentity。所以我想出了以下伪代码:注销时:我在正确的轨道上吗?是否有一些很好的例子说明如何在ClaimsPrincipal中实现多重身份?我进行了搜索,虽然我发现了对多重身份的简短提及,但我没有找到实际的例子。建议:在您的特定情况下,我们可以让两个ClaimsPrincipal对象处理两个不同的ClaimsIdentities。varclaims1=newList{newClaim(ClaimTypes.Name,"Louise"),newClaim(ClaimTypes.Role,"Manager")};ClaimsIdentityclaimsIdentity1=newClaimsIdentity(claims1,"XYZ");ClaimsPrincipalprincipal1=newClaimsPrincipal(claimsIdentity1);varclaims2=newList{newClaim(ClaimTypes.Name,"Louise"),newClaim(ClaimTypes.Role,"Employee")};ClaimsIdentityclaimsIdentity2=newClaimsIdentity(claims2,"XYZ");ClaimsPrincipalprincipal2=newClaimsPrincipal(claimsIdentity2);感觉你的问题可能是一个人为的问题:每个区域都是单独处理的,所以即使用户既是管理员又是员工,他们也必须分别登录每个区域。推动这种分离的要求是什么?这是问题的症结所在,解决这个问题可能比尝试为具有多个身份的单个用户发明一个可行的解决方案更容易。要回答您的直接问题,不,您不能从委托人中删除身份。您可以只创建一个新的委托人并用您需要的任何一组声明替换现有的委托人。Thread.CurrentPrincipal=newClaimsPrincipal(...);如果您根据现有委托人的身份或声明构建委托人,则可以过滤掉要删除的委托人。基于声明的身份验证的基础是将身份验证机制与授权机制分离的思想。您需要知道用户是谁才能进行身份验证。授权时,与用户关联的声明用于执行访问控制决策,例如将它们放置在系统的管理区域中。用户的身份应该是他们在系统上下文中的身份。在大多数系统中,用户将拥有单一身份。出于技术原因,拥有多个身份可能很有用,例如允许用户将单个身份与可以更改的多个身份相关联的系统,但通常如果每个用户都有一个身份,系统是最简单的,因为现实就是你有一个单一的用户,通常向你展示一个单一的身份。我只能想到一个用户使用多个身份登录系统的正当理由:用户希望使用多个身份进行操作以分离他们的活动,例如工作和个人帐户。您的系统应该能够使用单个经过身份验证的身份进行操作。如果您的经理需要通过额外的身份验证步骤才能访问管理部分,请不要尝试删除他们现有的身份-而是使用提升系统进行身份验证并将身份添加到他们现有的主体中。用户没有改变,你只是得到了更多与他们相关的声明。以上就是C#学习教程:如何从ClaimsPrincipal中删除ClaimsIdentity共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: