自定义 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"));
    }
}