3

我想了解ASP.NET身份验证和授权机制。我明白什么是索赔&什么是角色。在几乎所有相关的博客文章中,或者在这里提出的问题都建议使用声明并避免角色。我现在很困惑。我如何使用没有角色的声明? (我通常在注册后将角色分配给用户。)索赔没有角色?

任何帮助表示赞赏。

谢谢

回答

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 

然而,什么权利给你是做授权基于任意索赔的能力,如“用户是比旧的18年“或”用户来自法国,德国或西班牙“。这种武断的陈述并不一定会映射到“角色”,而是完美的主张。

你这样做的授权与自定义声明授权管理器,这里的例子

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