Asp.net 身份 - 如何维护登录的用户角色?

Posted

技术标签:

【中文标题】Asp.net 身份 - 如何维护登录的用户角色?【英文标题】:Asp.net identity - How to maintain logged in user role? 【发布时间】:2015-05-10 06:45:18 【问题描述】:

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

实现了自定义用户存储来创建帐户。

[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();

我没有获得角色“测试”

我倒霉的是,在声明中,我拥有用户的所有角色除了角色 = 测试

如何授权用户角色或保持登录在这里..

【问题讨论】:

您能说说投反对票的原因吗? 到目前为止您尝试过什么?您可以在这里充分利用基于声明的身份验证机制。 其实我是根据角色授权的。但有时用户拥有多个角色。我想允许具有一个角色的用户进入系统。在进入申请之前,他将被要求选择角色。在这种情况下,我需要解决方案。 我在 userIdentity.AddClaim(new Claim(ClaimTypes.Role, "Jeeva")); 中添加了当前用户角色。我可以在方法中得到那个细节。可以在 web api 操作中验证以了解当前登录的用户角色吗? 有没有教程可以用身份在asp.net web api中实现模拟? 【参考方案1】:

对于您的问题,我看到至少三种解决方案:

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

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

    根本不要这样做,我对此非常认真。为您的用户提供一个干净的界面,让他知道他有什么角色,并使用区域和其他技术来分离关注点。

【讨论】:

以上是关于Asp.net 身份 - 如何维护登录的用户角色?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.Net Core - 登录后如何等待用户身份立即可用?

如何使用 asp.net mvc 从头开始​​添加用户角色

ASP.NET 身份检查用户角色不起作用

控制器 ASP.net 核心 2.1 中的 Jwt 角色身份验证

如何在asp.net core中添加多个身份和多个角色

SQL 数据库驱动的 C# 和 ASP.Net 基于角色的身份验证控制