我正在创建一个将生成JWT令牌的方法。该方法的一部分从我的web.config中读取一个值,该值用作“秘密”,用于生成用于创建JWT令牌签名的哈希。
<add key="MySecret" value="j39djak49H893hsk297353jG73gs72HJ3tdM37Vk397" />
Run Code Online (Sandbox Code Playgroud)
最初,我尝试使用以下命令将“秘密”值转换为字节数组。
byte[] key = Convert.FromBase64String(ConfigurationManager.AppSettings["MySecret"]);
Run Code Online (Sandbox Code Playgroud)
但是,到达此行时引发了异常。
输入内容不是有效的Base-64字符串,因为它包含非base 64字符,两个以上的填充字符或填充字符中的非法字符。
因此,我查看了OAuth代码,然后使用了另一种方法将base64字符串更改为字节数组
byte[] key = TextEncodings.Base64Url.Decode(ConfigurationManager.AppSettings["MySecret"]);
Run Code Online (Sandbox Code Playgroud)
此方法没有问题。在我看来,他们在做同样的事情。将Base64文本值更改为字节数组。但是,我一定会丢失一些东西。为什么Convert.FromBase64String失败并TextEncodings.Base64Url.Decode起作用?