C# Convert.FromBase64string在使用整数值从jwt负载解码编码的JSON字符串时引发无效的Base-64异常

C# Convert.FromBase64string在使用整数值从jwt负载解码编码的JSON字符串时引发无效的Base-64异常,c#,.net,C#,.net,我正在编写一个函数来手动验证并获取jwt access_令牌的头和有效负载对 我正在使用可在上获得的示例令牌进行测试 在这一点上,我的代码非常简单 string[] tokenSegments = Token.Split('.'); string tokenHeaders = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[0])); string tokenPayload = Encoding.UTF8.GetStr

我正在编写一个函数来手动验证并获取jwt access_令牌的头和有效负载对 我正在使用可在上获得的示例令牌进行测试 在这一点上,我的代码非常简单

string[] tokenSegments = Token.Split('.');
string tokenHeaders = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[0]));
string tokenPayload = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[1]));
当它到达tokenPayloadLine时,我得到以下异常

System.FormatException:输入不是有效的Base-64字符串,因为它包含>一个非Base 64字符、两个以上填充字符,或者填充字符中包含一个非法>字符。 在System.Convert.FromBase64CharPtr处(Char*inputPtr,Int32 inputLength) 在System.Convert.FromBase64String处(字符串s)

在这个级别抛出异常

Convert.FromBase64String(tokenSegments[1])
请注意,我可以毫无例外地获取标题值

我尝试并编辑了令牌,以更改有效负载上可用的整数值,使其成为字符串,然后我成功地获得了有效负载

只是一个比较 引发异常的编码字符串为

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
工作正常的是

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoiMTUxNjIzOTAyMiJ9
如果对它们进行解码,您会发现唯一的区别是导致异常的整数值


我做错什么了吗?这不是转换功能的预期用途吗?任何想法或建议都会有帮助。请注意,我需要手动执行此操作,因为我完全了解在线提供的jwt库。

Base64需要在结尾处填充
=
,不是每个工具都会添加这些

string  s = // some base64 witout padding;
s = s.PadRight(s.Length + (s.Length * 3) % 4, '=');  // add padding
var data = Convert.FromBase64String(s);

我本以为会出现一个无效的长度异常,但不是这个。JWT不使用纯Base64,它使用了一个名为。
Convert
方法无法处理此问题(但我链接到的页面包含一些代码和指向库方法的链接),可能存在重复