【发布时间】:2020-12-15 05:23:27
【问题描述】:
我在验证我获得的 JWT 令牌的签名时遇到了一些问题。令牌使用 HS256 签名。我尝试创建签名以证明收到的签名的代码是:
JwtSecurityToken token = tokenHandler.ReadJwtToken(tokenString);
byte[] keyBytes = Encoding.UTF8.GetBytes("secret");
HMACSHA256 hmac = new HMACSHA256(keyBytes);
byte[] signatureBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(token.RawHeader + "." + token.RawPayload));
string signature = Convert.ToBase64String(signatureBytes);
我从收到的令牌中得到的签名例如:
pYscLlinuNhO-sFyEIRRLZP7yrl8GopGJ3I6QSxg2tU
但我从算法中得到的签名是在这种情况下:
pYscLlinuNhO+sFyEIRRLZP7yrl8GopGJ3I6QSxg2tU=
所以签名很接近,但不相等。在验证签名时,我不明白我做错了什么。字母和数字似乎每次都是正确的,但特殊字符大多不同,签名末尾总是有一个“=”。 也许有人知道我做错了什么。
【问题讨论】:
标签: c# jwt base64 signature verify