我在互联网上看过不同的地方,我还没有看到我的签名与其他实现有何不同:
string CreateToken(User user)
{
var header = new
{
typ = "JWT",
alg = "HS256"
};
var claim = new
{
iat = ToUnixTime(DateTime.UtcNow),
jti = Guid.NewGuid(),
email = user.Email,
name = user.UserId,
};
string headerAndClaim =
Base64UrlEncode(JsonConvert.SerializeObject(header)) +
"." +
Base64UrlEncode(JsonConvert.SerializeObject(claim));
var key = Encoding.UTF8.GetBytes("MySecret");
string signature = null;
using (var signer = new HMACSHA256(key))
{
signature = Encoding.UTF8.GetString
(
signer.ComputeHash(Encoding.UTF8.GetBytes(headerAndClaim))
);
}
return
headerAndClaim +
"." +
Base64UrlEncode(signature);
}
private static string Base64UrlEncode(string input)
{
input = Convert.ToBase64String(Encoding.UTF8.GetBytes(input));
input = input.Split('=')[0];
input = input.Replace('+', '-');
input = input.Replace('/', '_');
return input;
}
我的调试工具https://jwt.io/
中的有效负载和标头检出功能正常但我的签名总是无效的,看起来不正确。
我在哪里错了?