没有角色的要求?

14 浏览
0 Comments

没有角色的要求?

我正在尝试理解ASP.NET Identity的身份验证和授权机制。我理解什么是声明和什么是角色。几乎每篇相关的博客文章或问题都建议使用声明而避免使用角色。我现在感到困惑。我如何在没有角色的情况下使用声明?(通常,我在用户注册后分配角色。)

感谢任何帮助。

谢谢。

0
0 Comments

Claims without roles是一个问题,它出现的原因是Claims和Roles可以分别使用。Roles根据用户所属的组来控制访问权限,而Claims根据用户自己关于自己的各种声明来控制访问权限。

解决这个问题的方法是使用Claims来实现类似于AuthorizeAttribute的授权。下面的两个链接提供了关于基于角色和声明的安全性的概述,并提供了如何在属性中使用Claims的示例,然后将其附加到控制器操作中,实现授权。

- [What is the claims in ASP .NET Identity](https://stackoverflow.com/questions/21645323)

- [ASP.NET Claims Authorization with ASP.NET Identity](http://bitoftech.net/2015/03/31/asp-net-web-api-claims-authorization-with-asp-net-identity-2-1/)

0
0 Comments

在几乎每篇相关的博客文章或问题中,都建议使用声明(claims)而避免使用角色(roles)。

我只能推测,因为你没有给出具体的链接,所以并不是完全指“声明(claims)优于角色(roles)”。实际上是“使用基于声明(claims)的安全模型而不是基于角色(roles)的安全模型”。这个很容易解释,因为角色也是声明,使用声明你不仅有角色,还可能有其他声明。

从技术上讲,如果你创建一个ClaimsPrincipal并添加Role声明,ASP.NET将会正确地识别角色,无论你在哪里期望它工作 - WebForms授权,MVC授权过滤器以及其他基于角色的功能都可以正常工作。

如果你需要一些技术细节,请参考我的博客文章,我在那里展示了如何轻松从旧的基于角色的Forms身份验证切换到新的基于声明的身份验证。

具体来说,你只需要像这样添加角色声明:

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);
// 将principal写入cookie

然而,声明给你的是基于“任意”声明进行授权的能力,例如“用户年龄大于18岁”或“用户来自法国、德国或西班牙”。这些任意的声明不一定与“角色”相对应,但是它们是完美的声明。

你可以通过自定义的声明授权管理器进行此授权,这里有一些示例:

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

0