自定义 asp.net 身份角色声明
Customize asp.net identity role claim
我将 asp.net 身份与 ClaimsPrincipal 和 ClaimsIdentity 一起使用。身份由自定义用户管理器创建,并作为不记名令牌发送给客户端。
一切正常,但我想指示 asp.net 为角色使用自定义声明类型,而不是标准的 System.Security.Claims.ClaimTypes.Role (http://schemas.microsoft.com/ws/2008/06/identity/claims/role)。
可能吗?
编辑:我想将标准授权属性与角色构造函数一起使用,例如:Authorize(Roles="staff") 并让框架检查声明,但我的自定义角色声明类型 ("myapproleclaim") 而不是标准的。
你可以这样做,
public class CustomPrinciple : ClaimsPrincipal
{
public CustomPrinciple(ClaimsIdentity identity) : base(identity)
{
}
public override bool IsInRole(string role)
{
return HasClaim("myRoleClaimType", role);
}
}
[TestClass]
public class CustomRoleTest
{
[TestMethod]
public void testing_custom_role_type()
{
var identity = new ClaimsIdentity();
identity.AddClaim(new Claim("myRoleClaimType", "role1"));
var principle = new CustomPrinciple(identity);
Assert.IsTrue(principle.IsInRole("role1"));
Assert.IsFalse(principle.IsInRole("role2"));
}
}
我将 asp.net 身份与 ClaimsPrincipal 和 ClaimsIdentity 一起使用。身份由自定义用户管理器创建,并作为不记名令牌发送给客户端。
一切正常,但我想指示 asp.net 为角色使用自定义声明类型,而不是标准的 System.Security.Claims.ClaimTypes.Role (http://schemas.microsoft.com/ws/2008/06/identity/claims/role)。
可能吗?
编辑:我想将标准授权属性与角色构造函数一起使用,例如:Authorize(Roles="staff") 并让框架检查声明,但我的自定义角色声明类型 ("myapproleclaim") 而不是标准的。
你可以这样做,
public class CustomPrinciple : ClaimsPrincipal
{
public CustomPrinciple(ClaimsIdentity identity) : base(identity)
{
}
public override bool IsInRole(string role)
{
return HasClaim("myRoleClaimType", role);
}
}
[TestClass]
public class CustomRoleTest
{
[TestMethod]
public void testing_custom_role_type()
{
var identity = new ClaimsIdentity();
identity.AddClaim(new Claim("myRoleClaimType", "role1"));
var principle = new CustomPrinciple(identity);
Assert.IsTrue(principle.IsInRole("role1"));
Assert.IsFalse(principle.IsInRole("role2"));
}
}