我正在尝试了解ASP.NET身份验证和授权机制.我理解什么是索赔&什么是角色.在几乎所有相关的博文中,或者在这里提出问题时,建议使用声明并避免角色.我在这一点上很困惑.如何使用没有角色的声明? (我通常在用户注册后为其分配角色.)
任何帮助表示赞赏.
谢谢
解决方法
角色也是主张,声称更为一般.
In almost every related blog post,or question on here it’s advised to use claims and avoid roles.
我只能推测,因为你没有显示确切的链接,它不完全是“对角色的主张”.
相反,“使用基于声明的安全模型而不是基于角色的安全模型”.这个很容易解释,因为角色也是声明,使用你有角色的声明,但你也可能有其他声明.
从技术上讲,如果您创建一个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
但是,声称给你的是能够根据“用户年龄超过18岁”或“用户来自法国,德国或西班牙”等任意声明进行授权.这种任意陈述不一定映射到“角色”,而是完美的主张.
您可以使用自定义声明授权管理器执行此授权,此处为示例