Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net标识-如何维护登录用户角色?_C#_Asp.net_Angularjs_Asp.net Identity_Identity - Fatal编程技术网

C# Asp.net标识-如何维护登录用户角色?

C# Asp.net标识-如何维护登录用户角色?,c#,asp.net,angularjs,asp.net-identity,identity,C#,Asp.net,Angularjs,Asp.net Identity,Identity,我正在使用Angularjs项目,并使用Asp.net身份自定义存储提供程序和企业库进行令牌身份验证 已实现自定义userstore以创建帐户 [Authorize]属性在登录后运行良好。我想限制特定用户的方法 因此尝试实现[Authorize(Roles=“Admin,User”)] 在实际应用中,一个用户可以有两个角色。但是根据系统,当用户登录时,我们限制用户选择特定的角色 所以,在asp.net身份验证后,用户应该选择其中任何一个角色 我需要的是 我想维护他选择的角色(我们认为这个概念像冒

我正在使用Angularjs项目,并使用Asp.net身份自定义存储提供程序和企业库进行令牌身份验证

已实现自定义userstore以创建帐户

[Authorize]属性在登录后运行良好。我想限制特定用户的方法

因此尝试实现[Authorize(Roles=“Admin,User”)]

在实际应用中,一个用户可以有两个角色。但是根据系统,当用户登录时,我们限制用户选择特定的角色

所以,在asp.net身份验证后,用户应该选择其中任何一个角色

我需要的是

我想维护他选择的角色(我们认为这个概念像冒充用户,但不完全是这样)。

或者

需要在Authorize属性本身中实现

我看过一些例子,比如我们可以添加身份声明

但我只能在方法中添加自定义声明

GenerateUserIdentityAsync

在我的情况下,我需要在登录验证后添加索赔。我已经完成了一些示例,并实现如下

 ClaimsIdentity identity = new ClaimsIdentity(DefaultAuthenticationTypes.ApplicationCookie);
identity.AddClaim(new Claim(ClaimTypes.Role, "Test"));
添加声明后,当我尝试获取声明以检查登录的用户角色时

 List<Claim> claim = claims.Where(c => c.Type == ClaimTypes.Role).ToList();
List claim=claims.Where(c=>c.Type==ClaimTypes.Role).ToList();
我没有得到角色“测试”

这里我的坏运气是,在声明中,除了role=test之外,我拥有用户的所有角色


如何授权用户角色或在此处保持登录状态。

我认为至少有三种解决方案可以解决您的问题:

  • 使用声明转换筛选角色声明,以匹配用户选择的角色。您可以使用声明转换中间件,也可以在登录期间过滤声明(请注意,您在登录之前不知道用户角色,之后过滤可能太晚)PRO不一定需要会话状态CON用户无法在运行时进行选择

  • 将角色存储在会话中,并针对该角色进行身份验证。当用户选择其角色时,请确保检查角色声明PRO用户无需重新登录即可更改角色CON需要会话状态(在服务器场环境中可能是一个问题)

  • 不要这样做,我是认真的。为用户提供一个干净的界面,让用户知道自己的角色,并使用区域和其他技术来分离关注点


  • 你能说说否决投票的原因吗?到目前为止你试过什么?您可以在这里完美地使用基于声明的身份验证机制。实际上,我是基于角色进行授权的。但有时用户有不止一个角色。我想允许具有一个角色的用户访问系统。他将被要求在进入应用程序之前选择角色。在这种情况下,我需要解决这个问题。我已经在类似userIdentity.AddClaim(newclaim(ClaimTypes.role,“Jeeva”);中添加了当前用户角色;。我可以从方法中得到细节。是否可以在web api操作中验证以了解当前登录的用户角色?是否有任何教程可以使用标识在asp.net web api中实现模拟?