【问题标题】:How to add custom claims types如何添加自定义声明类型
【发布时间】:2020-09-12 06:26:08
【问题描述】:
var ManagerAccess = context.Principal.FindFirst(ClaimTypes.System).Value;

在这里我想这样执行: (claimstypes.ManagerAccess).value;

这可能吗?

【问题讨论】:

  • 您能提供更多信息吗?您使用的是 JWT 还是 ASP.NET Identity?您是否尝试过一些不起作用的方法,它是什么?
  • 您想在何时何地添加自定义声明类型?另外,Claimstypes 是静态类,您不能使用Claimstypes.ManagerAccess,您可以使用context.Principal.FindFirst("ManagerAccess").Value吗?
  • .AddJwtBearer(x => { x.Events = new JwtBearerEvents { OnTokenValidated = context =>{ ///这是声明类型的标准格式 var name = int.Parse(context.Principal.FindFirst( ClaimTypes.Name).Value); ///但我想根据我的要求添加我的自定义声明类型,如经理访问和其他类型.. var managerAccess = context.Principal.FindFirst(ClaimTypes.managerAccess).Value; var claim = new System.Collections.Generic.List{ new Claim("demo1", demo1)}; var appIdentity = new ClaimsIdentity(claims);

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:

要添加自定义声明类型,您可以使用IClaimsTransformation

public class CustomClaimsTransformer : IClaimsTransformation
{
    public Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        ((ClaimsIdentity)principal.Identity).AddClaim(new Claim("ManagerAccess", "MyValue"));
        return Task.FromResult(principal);
    }
}

在startup.cs中注册

services.AddScoped<IClaimsTransformation, CustomClaimsTransformer>();

检查您的声明:

var ManagerAccess = context.Principal.FindFirst("ManagerAccess").Value;

更多解决方案,请参考Implementing custom claim with extended MVC Core Identity user

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2022-01-20
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2017-02-11
    相关资源
    最近更新 更多