C# .NET库中的JWT无效签名
我目前正在努力创建任何.net库的签名来访问Twitch api端点。当我复制粘贴生成的jwt时,jwt.io页面总是说签名无效。当我编辑这个秘密时,签名显然被调整了,当我使用调整后的jwt时,我可以毫无问题地调用Twitch api。当我使用生成的jwt时,我总是以401身份验证失败而告终 我现在尝试了几乎所有的.net库,所有这些库都为HS256生成了错误的签名…我不确定我做错了什么,因为我是JWT的新手,找不到任何指向正确方向的东西。下面是我使用jwt.net库()生成jwt的代码。如果有人能帮我,我将不胜感激C# .NET库中的JWT无效签名,c#,.net,jwt,C#,.net,Jwt,我目前正在努力创建任何.net库的签名来访问Twitch api端点。当我复制粘贴生成的jwt时,jwt.io页面总是说签名无效。当我编辑这个秘密时,签名显然被调整了,当我使用调整后的jwt时,我可以毫无问题地调用Twitch api。当我使用生成的jwt时,我总是以401身份验证失败而告终 我现在尝试了几乎所有的.net库,所有这些库都为HS256生成了错误的签名…我不确定我做错了什么,因为我是JWT的新手,找不到任何指向正确方向的东西。下面是我使用jwt.net库()生成jwt的代码。如果有
var payload = new Dictionary<string, object>
{
{ "exp", DateTimeOffset.Now.AddSeconds(360).ToUnixTimeSeconds()},
{ "user_id", "668312333"},
{ "role", "external"},
};
var secret = Encoding.UTF8.GetString(Convert.FromBase64String("MY SHARED EXTENSION SECRET FROM TWITCH"));
IJwtAlgorithm algorithm = new HMACSHA256Algorithm(); // symmetric
IJsonSerializer serializer = new JsonNetSerializer();
IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
var token = encoder.Encode(payload, secret);
var有效负载=新字典
{
{“exp”,DateTimeOffset.Now.AddSeconds(360.ToUnixTimeSeconds()},
{“用户id”,“668312333”},
{“角色”,“外部”},
};
var secret=Encoding.UTF8.GetString(Convert.FromBase64String(“我的TWITCH共享扩展名秘密”);
IJwtAlgorithm=新的HMACSHA256Algorithm();//对称的
IJsonSerializer serializer=新的JsonNetSerializer();
IBASE64URLENCDER URLENCDER=新的JWTBASE64URLENCDER();
IJwtEncoder=新的JwtEncoder(算法、序列化程序、URLCoder);
var token=encoder.Encode(有效载荷,秘密);
您需要将密码设置为字节数组,因为这是基础库所需要的:-
var secret = Convert.FromBase64String("MY SHARED EXTENSION SECRET FROM TWITCH");
跳出的一件事是,您通过UTF8将您的秘密转换为字符串,尝试执行
var secret=Convert.FromBase64…
@KeithNicholas OMG我实际上是哑巴哈哈,或者是瞎子。这就是它xD非常感谢你!如果你想将此作为答案发布,我将很乐意将其标记为解决方案!非常感谢。很容易犯错误,在这种情况下,字符串应该可以工作,但我认为对字符串的编码和解码不匹配。只是字节数组实际上是秘密的理想形式