令牌验证后将索赔更新为委托人

问题描述

我有使用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>();

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...