不确定我的令牌为何无效。我用邮递员调用login()来获取它,然后将其粘贴到JWT.io中,它说“无效签名” 我可以将我的密钥粘贴到JWT.io中,它将进行验证,但这似乎不对,因为它随后将令牌更改为与登录方法返回给用户的不同的令牌! 这是我的令牌,密钥为“超级密钥”。令牌在粘贴到JWT.io后才有效
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIxIiwidW5pcXVlX25hbWUiOiJjaHVjayIsInJvbGUiOlsiTWVtYmVyIiwiQWRtaW4iXSwibmJmIjoxNTc5MTU5NDQ0LCJleHAiOjE1NzkyNDU4NDQsImlhdCI6MTU3OTE1OTQ0NH0.Uau2W66y7Kdj01MQbBeoOXiwVzQJSDMEZnbQc2jt1qUyfdc9N5bsla1VGMPHQPjRAcnKSfY3NwQBhCRE-SHZCQ
在这里我粘贴我的密钥以验证令牌
然后,我创建一个新的Postman get查询以获取一些值,然后使用从登录名发回的令牌。但是我得到401未经授权。
我在这样的邮递员中添加了令牌(与登录后发送给我的令牌相同,但我没有对其进行验证)
我还添加了“ IdentityModelEventSource.ShowPII = true;”到启动文件以显示其他调试信息,这是我在调试控制台中看到的内容。
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler 1 验证令牌失败。 Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10503:签名验证失败。尝试过的密钥:'Microsoft.IdentityModel.Tokens.SymmetricSecurityKey,KeyId: '。 捕获的异常: ”。 令牌:'{“ alg”:“ HS512”,“ typ”:“ JWT”}。{“ nameid”:“ 1”,“ unique_name”:“ chuck”,“ role”:[“ Member”,“ Admin” ],“ nbf”:1579159444,“ exp”:1579245844,“ iat”:1579159444}'。
如果需要,我可以粘贴我的令牌生成代码。 任何理解这里发生的事情的解释将不胜感激。 问题-我错过了一步吗?我是否提供与登录名一起发送给我的授权控制器方法相同的令牌,或者是否提供了更改后的令牌(都尝试过)?
这是我用来创建令牌的代码。
private async Task<string> GenerateJwtToken(User user)
{
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName)
};
var roles = await _userManager.GetRolesAsync(user);
foreach (var role in roles)
{
claims.Add(new Claim(ClaimTypes.Role, role));
}
var key = new SymmetricSecurityKey(Encoding.UTF8
.GetBytes(_config.GetSection("AppSettings:Token").Value));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);
var tokenDescriptor = new SecurityTokenDescriptor
{
Subject = new ClaimsIdentity(claims),
Expires = DateTime.Now.AddDays(1),
SigningCredentials = creds
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);
}
答案 0 :(得分:1)
我添加了
app.Authentication()
启动并成功运行...