Использование пользовательского RoleClaimType в промежуточном программном обеспечении OAuthBearer - PullRequest
0 голосов
/ 03 октября 2018

Сервер 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()

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

In OnValidateIdentity функция OAuthBearerAuthenticationProvider, we can rebind ClaimsIdentity with appropriate RolaClaimType and NameClaimType`:

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);
        }
    }
});
0 голосов
/ 06 октября 2018

Убедитесь, что для вашего Identity задан экземпляр System.Security.Claims.ClaimsIdentity:

  • Свойство ClaimsIdentity.RoleClaimType используется для указанияутверждение, которое представляет роль , и оно используется при оценке этой идентичности для метода ClaimsPrincipal.IsInRole(String).

Вы можете легко клонировать свою исходную личность из исходной (передаваяисходная заявка) и указание другого roleType имени с помощью конструктора:

ClaimsIdentity(IIdentity, IEnumerable<Claim>, String, String, String)

...