【发布时间】:2021-01-22 10:11:57
【问题描述】:
我正在尝试使用 HS256 签署 JWT。我正在使用 System.IdentityModel.Tokens.Jwt 。使用 jwt.io 解码令牌时,我得到 invalid signature 并且我注意到我的标头显示为:
{
"alg": "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256",
"typ": "JWT"
}
而不是我预期的{"alg":"HS256","typ":"JWT"}。
这是导致无效签名的原因吗?还有关于修复的任何想法吗?请注意,我还需要包含自定义声明。
var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.UTF8.GetBytes(clientsecret));
var credentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256Signature);
var header = new JwtHeader(credentials);
【问题讨论】:
-
您的签名在 jwt.io 上被认为无效的原因通常是因为您没有将密钥粘贴到右栏中“验证签名”下的字段中。
HS256是hmac-sha256的简称,不知道怎么改,会不会引起其他问题。 -
感谢您的评论,我相信更改右侧的字段会更改左侧的编码字符串,因此会对其进行固有的验证。
-
@当秘密与用于签名的秘密不匹配时,这是真的(然后验证毫无价值)。您需要先粘贴秘密,然后将令牌粘贴到左侧,以查看是否可以使用给定的秘密验证现有令牌。
-
嗯,是的,是有道理的。谢谢