2016-09-27 5 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

だから私はいつでもJWTClaimsPrincipalClaimsTransformationは自分の主張を追加するために後で呼び出されます修正しようとしていることを確認しましたapp.UseJwtBearerAuthenticationapp.UseClaimsTransformationを置くことによって、この問題を解決しました。

+0

お世話になりました! – Shimmy

関連する問題