无效的JWT签名

时间:2019-09-20 15:52:29

标签: c# .net jwt

我知道。我知道。大量与此确切标题相关的问题。但是在我看过的所有内容中,我找不到使用List<Claim>issueraudience创建JWT的那个。

    private string GetTokenString()
    {
        var claims = new List<Claim>()
        {
            new Claim("claim1", "foo-anything"),
            new Claim("claim2", "bar-anything")
        };

        string keyValue = "1234567890qwertyuiopasdfghjklzxcvbnm";  // NOT THE REAL KEY (changed for this SO question)
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(keyValue));

        var jwtToken = new JwtSecurityToken
          (
              issuer: "https://xxxxxx.net",
              audience: "https://www.xxxxxx.com",
              claims: claims,
              signingCredentials: new SigningCredentials(key, SecurityAlgorithms.HmacSha256Signature),
              expires: DateTime.Now.AddMinutes(30)
          );

        var handler = new JwtSecurityTokenHandler();
        string tokenString = handler.WriteToken(jwtToken);

        return tokenString;
    }

然后,如果我拿tokenString并将其插入https://jwt.io/,我会得到

  

无效签名

我创建JWT的方式有问题吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

查看签名密钥的base64编码

1234567890qwertyuiopasdfghjklzxcvbnm

出来就是这个

MTIzNDU2Nzg5MHF3ZXJ0eXVpb3Bhc2RmZ2hqa2x6eGN2Ym5t

请使用此值来验证生成的令牌,在这种情况下,应选中此复选框。

如果将复选框保留为空白,则使用与代码中相同的值。