没有角色的要求?

She*_*Dev 5 asp.net claims-based-identity role-base-authorization asp.net-identity

我正在尝试了解ASP.NET身份验证和授权机制。我了解什么是要求和什么角色。在几乎所有相关的博客文章或此处的问题中,建议使用声明并避免使用角色。在这一点上,我感到困惑。如何使用没有角色的声明?(我通常会在用户注册后为他们分配角色。)

任何帮助表示赞赏。

谢谢

Wik*_*hla 4

角色也是主张,只是更为笼统。

在几乎所有相关的博客文章或此处的问题中,建议使用声明并避免角色。

我只能推测,因为您没有显示确切的链接,所以这不完全是“对角色的声明”。

而是“使用基于声明的安全模型而不是基于角色的安全模型”。这个很容易解释,因为角色也是声明,使用声明你就有角色,但你可能还有其他声明。

从技术上讲,如果您创建ClaimsPrincipal并添加Role声明,ASP.NET 将在您期望的任何位置正确识别角色 - WebForms 授权、MVC 授权过滤器和其他基于角色的内容照常工作。

如果您需要一些技术细节,请参阅我的博客文章,其中我展示了如何轻松地从旧的基于角色的表单身份验证切换到新的基于声明的身份验证。

http://www.wiktorzychla.com/2014/11/forms-authentication-revisited-for-net.html

特别是,您只需添加这样的角色声明

var identity = new ClaimsIdentity( "custom" );
identity.AddClaim( new Claim( ClaimTypes.Name, txtLogin.Text ) );
identity.AddClaim( new Claim( ClaimTypes.Role, "admin" ) );

var principal = new ClaimsPrincipal( identity );

// write the principal to cookie  
Run Code Online (Sandbox Code Playgroud)

然而,声明赋予您的是基于任意声明(例如“用户年龄超过 18 岁”或“用户来自法国、德国或西班牙”)进行授权的能力。这种任意的陈述不一定映射到“角色”,而是完美的主张。

您可以使用自定义声明授权管理器来执行此授权,示例如下

https://msdn.microsoft.com/en-us/library/system.security.claims.claimsauthorizationmanager(v=vs.110).aspx