首页 > 解决方案 > 如何从 Webapi 控制器访问存储在声明中的自定义类型的值?

问题描述

我在自定义令牌生成中向 JWT 令牌添加了一些声明信息“id”

    var tokenDescriptor = new SecurityTokenDescriptor
    {
        Subject = new ClaimsIdentity(new[] { new Claim("id", user.Id.ToString()), new Claim( ClaimTypes.Role, user.Role ) }),
        Expires = DateTime.UtcNow.AddDays(7),
        SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
    };

当我尝试从声明中访问声明类型“id”时,它给了我一个运行时错误

访问声明的代码

public async Task<IActionResult> GetAll()
        {
            //var identity = HttpContext.User.Identity as ClaimsIdentity;
            //if (identity != null)
            //{
            //    IEnumerable<Claim> claims = identity.Claims;
            //    // or


            //}


            var id = User.FindFirst("id").Value;

        //some code here to access servce 
}

我正在排队的错误 var id = User.FindFirst("id").Value;

在此处输入图像描述

更新 这是显示用户有效并且其“id”已添加到声明中的屏幕截图

在此处输入图像描述

更新

这是我的自定义授权属性

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class AuthorizeAttribute : Attribute, IAuthorizationFilter
    {

        public AuthorizeAttribute()
        {
            
        }

        public void OnAuthorization(AuthorizationFilterContext context)
        {
            var user = (User)context.HttpContext.Items["User"];
            if (user == null)
            {
                // not logged in
                context.Result = new JsonResult(new { message = "Unauthorized" }) { StatusCode = StatusCodes.Status401Unauthorized };
            }
        }
    }

为什么它会引发错误,我如何访问声明中的“id”?

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

解决方案


我能够通过将当前经过身份验证的用户附加到HttpContext


推荐阅读