问题描述
我有使用JWTBearerAuthentication的API。从身份验证角度来看,一切正常。但是,需要在验证完成后更新主体上的索赔。我必须获取一些信息,而不是从源(令牌)声明中接收信息。我在考虑是否有一种方法,可以在验证成功后将一些声明添加到现有声明标识/委托人中,以执行某些访问权限。以下是我的启动课程中的示例代码。
pylint
解决方法
您可以通过多种方法在身份验证后修改声明:
一个选项是
options.Events = new JwtBearerEvents()
{
OnTokenValidated = context =>
{
// Token has passed validation and a ClaimsIdentity has been generated.
context.Principal.Identities.First().AddClaim(new Claim("VIPCustomer","YES"));
return Task.CompletedTask;
}
};
要启用更高级的索赔转换方案,我们可以添加一个自定义转换类
public class BonusLevelClaimTransformation : IClaimsTransformation
{
public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
if (!principal.HasClaim(c => c.Type == "bonuslevel"))
{
//Lookup bonus level.....
principal.Identities.First().AddClaim(new Claim("bonuslevel","12345"));
}
return Task.FromResult(principal);
}
}
然后我们在Startup.cs中注册它:
services.AddTransient<IClaimsTransformation,BonusLevelClaimTransformation>();