2016-09-27 25 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.UseJwtBearerAuthenticationapp.UseClaimsTransformation之後確信,只要JWT是要修改解決了這個問題ClaimsPrincipalClaimsTransformation將在後面叫添加自己的主張。

+0

謝謝分享男人! – Shimmy