【发布时间】:2020-09-18 12:48:23
【问题描述】:
我要从请求头中解码一个 JWT 令牌,它看起来像这样:
eyJzdWIiOiIxIiwiZXZlbnRfaWQiOiI3ZTA3Y2JmNC0wYjYyLTQ1MzMtYmE5ZC1mZGFjNDkyNTNjZTUiLCJpYXQiOiIxNTkwODk4Mzg1IiwiZXhwIjoiMTU5MDkwMTk4NSIsImlzcyI6ImxvY2FsaG9zdDo0NDM4NyIsInRpbWV6b25lX29mZnNldCI6LTcsInVzciI6Im1pbmcuaGlldS4xMzEyIiwiYWxpYXMiOiJNaW5nIEhpZXUiLCJwaG9uZSI6IjA4NDQ1OTAyNTIiLCJlbWFpbCI6ImhpZXVhbWlAZ21haWwuY29tIn0 P>
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.UTF8.GetString(base64EncodedBytes);
}
当将上面的令牌传递给解码方法时,它会抛出一个异常,告诉:
Base-64 字符数组或字符串的长度无效
dotnetfiddle 参考:https://dotnetfiddle.net/Z2TUz9
但是在 javascript 中使用时(使用 atob 函数),它可以正常工作。
谁能告诉我为什么,然后告诉我如何在 C# 中对其进行解码?
【问题讨论】:
-
看起来你去掉了字符串末尾的“==”。保持打开状态。
-
不,字符串末尾没有“==”,使用javascript的解码功能可以正常工作。只是 C# 代码不起作用