提供无效的令牌后,邮递员获得401未经授权的.Net Core身份验证后,我是否具有正确的令牌?

时间:2020-01-16 09:27:09

标签: .net-core jwt postman identity

不确定我的令牌为何无效。我用邮递员调用login()来获取它,然后将其粘贴到JWT.io中,它说“无效签名” 我可以将我的密钥粘贴到JWT.io中,它将进行验证,但这似乎不对,因为它随后将令牌更改为与登录方法返回给用户的不同的令牌! 这是我的令牌,密钥为“超级密钥”。令牌在粘贴到JWT.io后才有效

eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiIxIiwidW5pcXVlX25hbWUiOiJjaHVjayIsInJvbGUiOlsiTWVtYmVyIiwiQWRtaW4iXSwibmJmIjoxNTc5MTU5NDQ0LCJleHAiOjE1NzkyNDU4NDQsImlhdCI6MTU3OTE1OTQ0NH0.Uau2W66y7Kdj01MQbBeoOXiwVzQJSDMEZnbQc2jt1qUyfdc9N5bsla1VGMPHQPjRAcnKSfY3NwQBhCRE-SHZCQ

在这里我粘贴我的密钥以验证令牌

enter image description here

然后,我创建一个新的Postman get查询以获取一些值,然后使用从登录名发回的令牌。但是我得到401未经授权。

我在这样的邮递员中添加了令牌(与登录后发送给我的令牌相同,但我没有对其进行验证) enter image description here

我还添加了“ 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);
    }

1 个答案:

答案 0 :(得分:1)

我添加了

app.Authentication()

启动并成功运行...