在OAuthBearer中间件上使用自定义RoleClaimType

rks48beu  于 2023-05-05  发布在  其他
关注(0)|答案(2)|浏览(214)

OAuth服务器使用与System.Security.Claims.ClaimTypes.Role不同的声明类型发布角色声明:

var adminRole = new Claim("CustomRole", "Admin");
context.Ticket.Identity.AddClaim(adminRole);

我如何告诉OAuthBearerAuthentication中间件使用我的自定义角色声明类型,以便它获得Authorize属性:

//Startup
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions ...

[Authorize(Roles = "Admin")]
public IHttpActionResult SecureAction()
bwntbbo3

bwntbbo31#

确保您的Identity设置为System.Security.Claims.ClaimsIdentity的示例:

  • ClaimsIdentity.RoleClaimType属性用于指定表示 role 的声明,并且在为ClaimsPrincipal.IsInRole(String)方法计算此标识时使用它。

您可以轻松地从原始身份克隆原始身份(传递原始声明),并使用构造函数指定不同的roleType名称:
ClaimsIdentity(IIdentity, IEnumerable<Claim>, String, String, String)

f0brbegy

f0brbegy2#

OAuthBearerAuthenticationProviderOnValidateIdentity函数中,我们可以将ClaimsIdentity与适当的RolaClaimTypeNameClaimType重新绑定:

app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
    Provider = new OAuthBearerAuthenticationProvider
    {
        OnValidateIdentity = context =>
        {
            var claimsIdentity = new ClaimsIdentity(
                context.Ticket.Identity.Claims,
                OAuthDefaults.AuthenticationType,
                CustomClaimTypes.Name,
                CustomClaimTypes.Role);

            context.Validated(claimsIdentity);

            return Task.FromResult(0);
        }
    }
});

相关问题