【发布时间】:2020-05-30 05:10:27
【问题描述】:
我正在尝试在 .NET CORE 3.0 上开发 Web API,但我无法从控制器获取 userId
这是我的启动
RSAParameters keyParams = RsaKeyUtils.GetKeyParameters("jwt_key.conf");
var key = new RsaSecurityKey(keyParams);
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = key,
ValidAudience = GappedAuthSettings.TokenAudience,
ValidIssuer = GappedAuthSettings.TokenIssuer,
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
RequireSignedTokens = true,
ClockSkew = TimeSpan.FromMinutes(0)
};
});
这是颁发 JWT 令牌的方式:
private string GetToken(string userEmail, DateTime? expires, IEnumerable<Claim> claims)
{
var handler = new JwtSecurityTokenHandler();
var identity = new ClaimsIdentity(new GenericIdentity(userEmail, "Auth"), claims);
var securityToken = handler.CreateToken(new SecurityTokenDescriptor
{
Issuer = this.tokenOptions.Issuer,
Audience = this.tokenOptions.Audience,
SigningCredentials = this.tokenOptions.SigningCredentials,
Subject = identity,
Expires = expires,
IssuedAt = DateTime.UtcNow
});
return handler.WriteToken(securityToken);
}
当我尝试阅读它时,claimIdentity 返回一个具有空属性的对象
protected string GetUserId()
{
var claimsIdentity = this.User.Identity as ClaimsIdentity;
var userId = claimsIdentity.FindFirst("userId")?.Value;
if (userId != null)
{
return userId;
}
return null;
}
【问题讨论】:
-
你注册了认证中间件吗?
标签: c# .net-core asp.net-core-webapi jwt-auth