cbr*_*nch 9 claims-based-identity asp.net-core-mvc asp.net-core
我正在研究在ASP.NET(MVC Core 1.0)中使用基于声明的授权.设置a时ClaimsIdentity,我提供了一个键/值字符串对列表来表示每个Claim.例:
List<Claim> claims = new List<Claim>
{
new Claim("UserID", user.ID),
new Claim("Name", user.Name),
new Claim("Role", "basic")
};
Run Code Online (Sandbox Code Playgroud)
我的理解是我可以使用我想要的任何键/值.但是我注意到ClaimsType课程中有一些预定义的键可用.所以,我可能会使用其中一些预定义的键:
List<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Sid, user.ID),
new Claim(ClaimTypes.Name, user.Name),
new Claim(ClaimTypes.Role, "basic")
};
Run Code Online (Sandbox Code Playgroud)
问题:
如果我使用预定义的密钥,是否有关于分配给每个密钥的实际值的规则/限制,还是应用程序定义的?例如,是否可以粘贴数据库主键ClaimTypes.Sid,或者ASP.NET是否对ClaimTypes.Sid应该包含的内容有一定的期望?
是否有任何ClaimTypes所需要的,或者是完全由应用程序来决定什么包括或不包括什么呢?我想,答案可能取决于我将与之交互的特定第三方身份验证服务,但是如何使用不包含任何第三方身份验证的自包含ASP.NET项目的简单情况.ASP.NET本身是否有任何要求?
任何与使用特定键/值的要求和/或最佳实践的链接都将受到赞赏.
如果我使用预定义的密钥,是否有关于分配给每个密钥的实际值的规则/限制,还是应用程序定义的?例如,可以在ClaimTypes.Sid中粘贴数据库主键,还是ASP.NET对ClaimTypes.Sid应包含的内容有一定的期望?
ClaimTypes如果得到的话,使用预定义的其中一个也会修改Type属性Claim.您可以在此处找到这些类型的列表.据我所知,您可以自由地将数据库ID放入其中ClaimTypes.Sid,但我强烈建议您使用自己的名称来调用它.
是否需要任何ClaimTypes,还是完全由应用程序决定包含或不包含哪些内容?我想,答案可能取决于我将与之交互的特定第三方身份验证服务,但是如何使用不包含任何第三方身份验证的自包含ASP.NET项目的简单情况.ASP.NET本身是否有任何要求?
假设没有第三方,您可以决定什么是必需的和不需要的.请记住,如果您将声明存储在Cookie(而非第三方来源)中,则您的空间有限; cookie总共不能超过4096字节.
到目前为止,我发现的ASP.NET Core声明身份验证的最佳文章就在这里和这里.截至本帖子,我们仍然在RC1中,因此一些细节可能会在最终版本发布之前发生变化.
- 如果我使用预定义的键,是否有关于分配给每个键的实际值的任何规则/限制,或者它是应用程序定义的?例如,是否可以将数据库主键粘贴到 ClaimTypes.Sid 中,或者 ASP.NET 对 ClaimTypes.Sid 应包含的内容是否有某些期望?
基本上没有规则限制,但取决于代币的消费者。默认情况下,Asp.Net Identity 期望用户名为ClaimTypes.Name(用户显示名称或邮件,无论您使用什么)、角色为ClaimTypes.Role和用户 ID(不需要行 ID,只需唯一标识用户即可,即 Guid 或电子邮件地址)作为ClaimTypes.NameIdentifier。默认值也可以在 GitHub 上查看。
ClaimsIdentityOptions话虽如此,如果您使用自定义声明类型,则需要在配置 Asp.Net Identity 时告知它。
UserNameClaimType当您User.Identity.Name在控制器中访问它时,将使用其中设置的声明类型。如果您的声明类型与其中的类型不匹配,ClaimsIdentityOptions则只会返回 null。
| 归档时间: |
|
| 查看次数: |
4109 次 |
| 最近记录: |