code_verifier から code_challenge の生成方法について調べた
code_challenge_method=S256の場合は以下のような実装ロジックになる
node.jsで書いた
Oauth2のPKCE
base64エンコードじゃなくてbase64urlエンコードなのが注意点
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
const base64url = require("base64url"); | |
const sha256 = require("js-sha256"); | |
// 参考: https://tools.ietf.org/html/rfc7636#appendix-B | |
(async () => { | |
const code_verifier = get_code_verifier(); | |
const code_challenge = get_code_challenge(code_verifier); | |
console.log( | |
`code_verifier = ${code_verifier}\nのとき\ncode_challenge = ${code_challenge}\nです` | |
); | |
})(); | |
function get_code_challenge(str) { | |
const hash = sha256.arrayBuffer(str); | |
return base64url(hash); | |
} | |
function get_code_verifier() { | |
let buf = Buffer.alloc(32); | |
for (let i = 0; i < buf.length; i++) { | |
const random_num = Math.floor(Math.random() * 256); | |
buf.writeUInt8(random_num, i); | |
} | |
return base64url(buf); | |
} |