gpt4 book ai didi

c# - 使用 jose-jwt 和 jwt.io 生成的 JWT token

转载 作者:行者123 更新时间:2023-11-30 20:33:06 46 4
gpt4 key购买 nike

我正在尝试在 .NET 中生成 JWT token 。起初,我尝试使用“System.IdentityModel.Tokens.Jwt”,但它在 token 验证期间引起了问题,所以我切换到“jose-jwt”。即使我可以使用这段代码创建和验证 token :

private byte[] GetBytes(string str)
{
byte[] bytes = new byte[str.Length * sizeof(char)];
Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
return bytes;
}

public string Login(LoginInformation credential)
{
var payload = new Dictionary<string, object>()
{
{ "sub", "mr.x@contoso.com" },
{ "exp", 1300819380 }
};

var secretKey = GetBytes("myawesomekey");

string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256);

string json = JWT.Decode(token, secretKey);

return json;

}

当我尝试使用站点“https://jwt.io/”测试生成的 token 时遇到问题。事实上,我复制/粘贴生成的 token ,输入“myawesomekey”作为 key ,但它一直告诉我“无效签名”。

我可以忽略它(因为我的 C# 代码中的解码有效),但我很好奇,我想知道通过站点解码为什么会失败。我唯一的想法是,在 C# 代码中,我必须将 key 作为字节数组传递,因此仅将“myawesomekey”传递给站点可能是无效的。

最佳答案

您获取的 key 字节不正确:

var payload = new Dictionary<string, object>()
{
{ "sub", "mr.x@contoso.com" },
{ "exp", 1300819380 }
};

var secretKey = Encoding.UTF8.GetBytes("myawesomekey");

string token = JWT.Encode(payload, secretKey, JwsAlgorithm.HS256);
return token;

工作正常。这可能也是 System.IdentityModel.Tokens.Jwt 问题的原因。

关于c# - 使用 jose-jwt 和 jwt.io 生成的 JWT token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40643752/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com