ASP.NET标识“基于角色”的声明

我知道我可以使用声明来声明用户:

var claims = new List(); claims.Add(new Claim(ClaimTypes.Name, "Peter")); claims.Add(new Claim(ClaimTypes.Email, "peter@domain.com")); 

但是,我应该如何存储“基于角色”的声明? 例如:

用户是超级管理员。

 claims.Add(new Claim("IsSuperAdmin, "true")); 

值参数“true”感觉完全冗余。 如何使用索赔表达此陈述?

这已经由框架为您完成。 当用户登录时,所有用户角色都将添加为声明类型为ClaimTypes.Role声明。角色和值是角色名称。

当您执行IPrincipal.IsInRole("SuperAdmin") ,框架实际上会检查用户是否存在类型为ClaimTypes.Role和值为SuperAdmin

所以不需要做任何特别的事情。 只需将用户添加到角色即可。

您可以使用ClaimType 角色存储角色

 claims.Add(new Claim(ClaimTypes.Role, "SuperAdmin")); 

您需要在声明中使用ClaimsType.Role类型指定角色,然后指定包含ClaimsIdentity中角色的声明类型,如下所示。

 var claimsIdentity = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Email, "peter@domain.com"), new Claim(ClaimTypes.Name, "Peter"), new Claim(ClaimTypes.Role, "SuperAdmin"), }, "ApplicationCookie", ClaimTypes.Email, ClaimTypes.Role); 

这将允许您使用控制器中的[Authorize(Roles = "SuperAdmin")]属性。