【问题标题】:Custom claims with Jwt Bearer Authentication使用 Jwt 不记名身份验证的自定义声明
【发布时间】: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


    【解决方案1】:

    所以我通过将app.UseClaimsTransformation 放在app.UseJwtBearerAuthentication 之后解决了这个问题,这样可以确保每当JWT 要修改ClaimsPrincipal 时,之后都会调用ClaimsTransformation 来添加我自己的声明。

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 1970-01-01
      • 2021-06-30
      • 2019-09-26
      • 1970-01-01
      • 2019-04-22
      • 2022-01-20
      • 2017-09-09
      • 2020-05-20
      相关资源
      最近更新 更多