我将从请求标头中解码 JWT 令牌,它看起来像这样:
eyJzdWIiOiIxIiwiZXZlbnRfaWQiOiI3ZTA3Y2JmNC0wYjYyLTQ1MzMtYmE5ZC1mZGFjNDkyNTNjZTUiLCJpYXQiOiIxNTkwODk4Mzg1IiwiZXhwIjoiMTU5MDkwMTk4NSIsImlzcyI6ImxvY2FsaG9zdDo0NDM4NyIsInRpbWV6b25lX29mZnNldCI6LTcsInVzciI6Im1pbmcuaGlldS4xMzEyIiwiYWxpYXMiOiJNaW5nIEhpZXUiLCJwaG9uZSI6IjA4NDQ1OTAyNTIiLCJlbWFpbCI6ImhpZXVhbWlAZ21haWwuY29tIn0
public static string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.UTF8.GetString(base64EncodedBytes);
}
将上面的令牌传递给 decode 方法时,它会抛出一个异常,告诉您:
Base-64 字符数组或字符串的长度无效
dotnetfiddle 参考:https ://dotnetfiddle.net/Z2TUz9
但是在 javascript 中使用它时(使用 atob 函数),它可以正常工作。
谁能告诉我为什么,然后告诉我如何在 C# 中解码它?