【发布时间】:2016-09-27 08:05:47
【问题描述】:
我有一个使用JwtBearerAuthentication 的应用程序。我正在尝试在每个请求的开头将我的应用程序声明添加到User(ClaimsPrincipal)。我设法使用ClaimsTransformationOptions 做到了这一点:
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。我的问题是,一旦我到达控制器,身份就会被覆盖!!
【问题讨论】:
标签: asp.net-core asp.net-identity claims-based-identity