Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET库中的JWT无效签名_C#_.net_Jwt - Fatal编程技术网

C# .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的代码。如果有

我目前正在努力创建任何.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非常感谢你!如果你想将此作为答案发布,我将很乐意将其标记为解决方案!非常感谢。很容易犯错误,在这种情况下,字符串应该可以工作,但我认为对字符串的编码和解码不匹配。只是字节数组实际上是秘密的理想形式