在PKCE中如何使用S256计算代码



在PKCE流中,生成一个伪随机代码并进行编码:

B90Xq7Y6UhxU0SC9VyS1jZOC24S-H0fg6ScxriFboubD5mu-

然后对S256进行哈希并通过base64url(sha256(code))进行编码。结果如下:

G0rGJ_-MUvTJ0-qvJxBqRULT2unY5V8_hqvnMpDRbEA

这是如何计算的?

由于B90Xq7Y6UhxU0SC9VyS1jZOC24S-H0fg6ScxriFboubD5mu-SHA256是,我少了一步1b4ac627ff8c52f4c9d3eaaf27106a4542d3dae9d8e55f3f86abe73290d16c40。并且可以看到,这个字符串的base64不匹配:MWI0YWM2MjdmZjhjNTJmNGM5ZDNlYWFmMjcxMDZhNDU0MmQzZGFlOWQ4ZTU1ZjNmODZhYmU3MzI5MGQxNmM0MA.

参见:RFC 7636


对于记录,这可以得到正确的值:

$ echo -n B90Xq7Y6UhxU0SC9VyS1jZOC24S-H0fg6ScxriFboubD5mu- | sha256sum | xxd -r -p | base64 | tr '/+' '_-' | tr -d '='
G0rGJ_-MUvTJ0-qvJxBqRULT2unY5V8_hqvnMpDRbEA

您将1b4ac627ff8c52f4c9d3eaaf27106a4542d3dae9d8e55f3f86abe73290d16c40表示为SHA256哈希的结果,但这实际上是该哈希的二进制值的十六进制编码。二进制值应该作为base64url编码例程的输入,而不是它的十六进制编码。

最新更新