Open6

Oauth2を作る

たいさんたいさん

1.認可コード取得
2.認可コードをアクセストークンにする
2.1.もしOpenIDを設定してたらOpenIDも一緒に返される
3.アクセストークンを使って色々する

たいさんたいさん

認可コード!!
1.認可エンドポイントに以下のparameterを添えてリダイレクト
?client_id=(CLIENT_ID)&redirect_uri=(リダイレクト先)&scope=(必要なスコープを+区切り)&response_type=code&state=(同じのが返される)&code_challenge=(文字列か、それをSHA256したやつ)&code_challege_method=(文字列=plain,SHA256=S256)
client_idは事前に登録してあるやつ
redirect_uriはリダイレクト先
scopeはmailとかopenIDとか
response_typeは固定で
stateは全く同じのが返されるから本物照明用
code_challengeとcode_challege_methodは下記参照
2.redirect_uriに?code=(認可コード)&state=(同じのが返された)

たいさんたいさん

code_challengeとcode_challege_methodにいついて!!
code_verifierを生成code_challenge_method通りの方法で暗号化
plainはそのままS256はSHA256
暗号化したものをcode_challengeと呼ぶ
code_challengeとcode_challenge_methodを送信
サーバー側で保管してもらう
アクセストークンにするときにcode_verifierとcode_challenge_methodを送信
サーバー側でcode_verifierをcode_challenge_methodで暗号化して、code_challenge比較
合ってたらトークンが返される

注意
code_verifierは43~128文字
基本256bitの乱数を生成してBase64エンコード後+を-,/を_,=をなんもなしに変換する

たいさんたいさん

認可コードをアクセストークンにする!!
POST {トークンエンドポイント} HTTP/1.1
Host: {認可サーバー}
Content-Type: application/x-www-form-urlencoded
で送信する
Bodyは
grant_type=authorization_code (固定)
code=(認可コード)
redirect_uri=(認可コードの章のと同じ奴)
code_verifier=(上記の説明見て)
戻り値はjson形式で
access_token:アクセストークン
token_type:トークンタイプ
expires_in:有効秒 (任意)
refresh_token:更新時のトークン (任意)
scope: [scoop群] (任意)