2016-09-27 7 views
2

У меня есть приложение, которое использует JwtBearerAuthentication. Я пытаюсь добавить претензии к заявке User(ClaimsPrincipal) в начале каждого запроса. Мне удалось сделать это с помощью ClaimsTransformationOptions:Пользовательские претензии с аутентификацией на предъявителя Jwt

app.UseClaimsTransformation(new ClaimsTransformationOptions 
{ 
    Transformer = new ClaimsTransformer<TUser, TRole>() 
}); 

и в моем TransformAsync:

public async Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context) 
{ 
    var services = context.Context.RequestServices; 
    var userManager = services.GetRequiredService<UserManager<TUser>>(); 
    var roleManager = services.GetRequiredService<RoleManager<TRole>>(); 

    var userId = 1; // Get the UserId from my store, let say its 1 for now 

    if (userId != 0) 
    { 
     var user = await userManager.FindByIdAsync(userId); 

     var claimsPrincipal = await new UserClaimsPrincipalFactory<TUser, TRole>(userManager, roleManager, _optionsAccessor) 
       .CreateAsync(user); 

     context.Principal.AddIdentities(claimsPrincipal.Identities); 
    } 

    return context.Principal; 
} 

До сих пор так хорошо, и претензии, которые загружаются из базы данных и добавлены к context.Principal. Моя проблема, когда я дойду до контроллера, личность перезаписывается !!

ответ

2

Так что я решил эту проблему, поставив app.UseClaimsTransformation после app.UseJwtBearerAuthentication, которые убедились, что всякий раз, когда JWT собирается по внесению поправок в ClaimsPrincipalClaimsTransformation будет называться впоследствии добавить свои собственные претензии.

+0

Спасибо, что поделились человеком! – Shimmy