我正在编写一个函数来手动验证并获取jwt access_token的标头和有效负载对,我正在使用https://jwt.io/上提供的示例令牌进行测试,这时 我的代码非常简单
string[] tokenSegments = Token.Split('.');
string tokenHeaders = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[0]));
string tokenPayload = Encoding.UTF8.GetString(Convert.FromBase64String(tokenSegments[1]));
Run Code Online (Sandbox Code Playgroud)
当它到达tokenPayloadLine im时收到以下异常
System.FormatException:输入不是有效的Base-64字符串,因为它包含>一个非基本的64个字符,两个以上的填充字符或填充字符中的一个非法字符。在System.Convert.FromBase64CharPtr(Char * inputPtr,Int32 inputLength)在System.Convert.FromBase64String(String s)
并且在此级别抛出异常
Convert.FromBase64String(tokenSegments[1])
Run Code Online (Sandbox Code Playgroud)
请注意,我可以毫无例外地获取标头值
我尝试并编辑了令牌,以更改有效负载处可用的整数值以使其成为字符串,然后我成功获取了有效负载
只是比较,抛出异常的编码字符串是
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
Run Code Online (Sandbox Code Playgroud)
工作正常的是
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoiMTUxNjIzOTAyMiJ9
Run Code Online (Sandbox Code Playgroud)
如果将它们都解码,您会发现唯一的区别是导致异常的整数值
难道我做错了什么?这不是转换功能的预期用途吗?任何想法或建议也将有所帮助,请注意,我需要手动执行此操作,因为我完全了解在线提供的jwt库。