PKCEをJavaScriptで実装する

code_verifier から code_challenge の生成方法について調べた
code_challenge_method=S256の場合は以下のような実装ロジックになる

node.jsで書いた
Oauth2のPKCE

base64エンコードじゃなくてbase64urlエンコードなのが注意点

"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);
}
view raw pkce.js hosted with ❤ by GitHub