在所有控制器方法上从 JWT 获取 userId?

我正在创建一个使用 JWT 进行身份验证和授权的 Core 2.0 Web API 项目。我想要保护的控制器方法都用Authorize属性修饰。


这是有效的。如果我在 Bearer 标头中传递 JWT,则会得到 200。如果我无法传递 JWT,则会得到 401。一切正常。在我的 JWT 中,我在授权时将用户 ID 存储在“UserId”字段中。


var claimsdata = new[] {

                    new Claim("UserId", user.Id.ToString()),

然后我有一个扩展方法:


public static string GetUserId(this IPrincipal user)

        {

            if (user == null)

                return string.Empty;


            var identity = (ClaimsIdentity)user.Identity;

            IEnumerable<Claim> claims = identity.Claims;

            return claims.FirstOrDefault(s => s.Type == "UserId")?.Value;

        }

在我的控制器方法中,使用“授权”,我经常需要用户的 ID。所以我调用了我的 GetUserId 方法。这有效。但是,我不确定这是否是从令牌中获取 Id 的最佳方式。


int.TryParse(User.GetUserId(), out _userId);

我需要在所有控制器上使用该代码。我不能在构造函数中做到这一点,因为..我认为这是错误的。


我在这里做对了吗?


MM们
浏览 322回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP