【发布时间】:2019-08-13 11:26:26
【问题描述】:
在我的 .net core 2.2 微服务中,我尝试从 JWT 令牌中提取声明以进行一些授权。身份验证是在系统的另一部分完成的,所以我现在不需要这样做。
我在 Startup.cs 中使用此代码:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
var signingKey = Encoding.UTF8.GetBytes("SECRET_KEY");
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = false,
ValidateAudience = false,
IssuerSigningKey = new SymmetricSecurityKey(signingKey)
};
});
在控制器上我有这个代码:
[Authorize]
[HttpPost]
public async Task<ActionResult<CreateResponse>> Create()
{
var userIdClaim = HttpContext.User.Claims.Where(x => x.Type == "empId").SingleOrDefault();
return Ok($"Your User ID is {userIdClaim.Value} and you can create invoices!");
}
我总是收到此错误消息和“未经授权”的响应:
Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10503:签名验证失败。尝试的键:'[PII 被隐藏]'。 捕获的异常: '[PII 被隐藏]'。 token: '[PII is hidden]'.
【问题讨论】:
-
签名验证失败。确保签名密钥正确。
-
也适用于 aspnet core 3.1
标签: asp.net-core .net-core jwt