我正在创建一个使用 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);
我需要在所有控制器上使用该代码。我不能在构造函数中做到这一点,因为..我认为这是错误的。
我在这里做对了吗?
相关分类