ReportingTypes的ASP.NET要求

时间:2016-03-23 13:33:30

标签: asp.net-core asp.net-core-mvc claims-based-identity

我在ASP.NET(MVC Core 1.0)中使用基于声明的授权进行调查。设置ClaimsIdentity时,我提供了一个键/值字符串对列表来表示每个Claim。例如:

List<Claim> claims = new List<Claim>
{
    new Claim("UserID", user.ID),
    new Claim("Name", user.Name),
    new Claim("Role", "basic")
};

我的理解是我可以使用我想要的任何键/值。但我注意到ClaimsType class提供了一些预定义的密钥。因此,我可能会使用其中一些预定义的键:

List<Claim> claims = new List<Claim>
{
    new Claim(ClaimTypes.Sid, user.ID),
    new Claim(ClaimTypes.Name, user.Name),
    new Claim(ClaimTypes.Role, "basic")
};

问题:

  1. 如果我使用预定义的密钥,是否有关于分配给每个密钥的实际值的规则/限制,还是应用程序定义的?例如,在ClaimTypes.Sid中粘贴数据库主键是否可以,或者ASP.NET是否对ClaimTypes.Sid应包含的内容有一定的期望?

  2. 是否有必需的ClaimTypes ,还是完全取决于应用程序来决定包含或不包含哪些内容?我想,答案可能取决于我将与之交互的特定第三方身份验证服务,但是如何使用不包含任何第三方身份验证的自包含ASP.NET项目的简单情况。 ASP.NET本身是否有任何要求?

  3. 有关使用特定键/值的要求和/或最佳实践的任何链接都将受到赞赏。

2 个答案:

答案 0 :(得分:6)

  

如果我使用预定义的密钥,是否有任何规则/限制   关于分配给每个密钥的实际值,还是应用程序   界定?例如,是否可以粘贴数据库主键   ClaimTypes.Sid​​,或者ASP.NET对某些内容有一定的期望   ClaimTypes.Sid​​应该包含?

如果结果为ClaimTypes,则使用其中一个预定义的Claim也会修改Type属性。 You can find a list of these types here。据我所知,您可以自由地将数据库ID放入ClaimTypes.Sid,但我强烈建议您使用自己的名称来调用它。

  

是否需要任何ClaimTypes,或者它是否完全符合   申请决定包括或不包括什么?我想   答案可能取决于特定的第三方身份验证服务   我会与之互动,但是如何简单的情况呢   不使用任何第三方的自包含ASP.NET项目   认证。 ASP.NET本身是否有任何要求?

假设没有第三方,您可以决定什么是必需的和不需要的。请记住,如果您将声明存储在Cookie(而非第三方来源)中,则您的空间有限; cookies cannot be larger than 4096 bytes in total

到目前为止,我发现的ASP.NET Core声明身份验证的最佳文章是herehere。截至本帖子,我们仍在RC1中,因此在最终版本发布之前,某些细节可能会发生变化。

答案 1 :(得分:1)

  
      
  1. 如果我使用预定义的密钥,是否有关于分配给每个密钥的实际值的规则/限制,还是应用程序定义的?例如,可以在ClaimTypes.Sid​​中粘贴数据库主键,还是ASP.NET对ClaimTypes.Sid​​应包含的内容有一定的期望?
  2.   

基本上没有规则限制,但它取决于令牌的消费者。默认情况下,Asp.Net Identity要求用户名为file1.o file2.o file3.o:(用户显示名称或邮件,无论您使用什么),角色为ClaimTypes.Name和用户ID(不一定是行ID,只有将用户(即Guid或电子邮件地址)标识为ClaimTypes.Role。默认值也可以显示为here on GitHub

话虽如此,如果您使用自定义声明类型,则需要在配置Asp.Net Identity时在ClaimTypes.NameIdentifier中告诉它。

ClaimsIdentityOptions中设置的声明类型是您在控制器中UserNameClaimType访问它时使用的声明类型。如果您的声明类型与User.Identity.Name中的声明类型不匹配,则只会返回null。