認可コードグラント+PKCE
概要
パブリッククライアント向け
ベースは認可コードグラントで、そこに(code_virifer、code_challenge、code_challenge_method)が加わったもの 認可コードが悪意あるアプリに横取りされても大丈夫なように、アクセストークン発行リクエストにcode_viriferという値を付与する
認可リクエストをした時点でのcode_viriferと認可コードを受け取ってアクセストークン発行リクエストのcode_viriferの値とが同じであることが確認できれば、横取り攻撃はないと言えるわけだ。
認可サーバー側にcode_challengeを保存しておく
認可コードが横取りされる仕組み
前提条件
リソースオーナーと同じデバイスに対象のアプリと悪意あるアプリとがインストールされている
悪意あるアプリは対象アプリと同じカスタムスキーマが設定されている
悪意あるアプリは対象アプリのクライアントIDを知っている
/icons/point.icon認可コードレスポンスでブラウザからネイティブアプリが起動する際に、同じカスタムスキーマを設定することで対象のアプリではなく悪意あるアプリが開くようにできる
https://gyazo.com/82c7810bf25978458dd3dd083f2f55bb
シーケンス
https://gyazo.com/c28026434e68238fac3ec65a95d41047
code_virifer
ランダム文字列
code_challenge_method
plain | S256
code_viriferに施す計算方法の指定
code_challenge
code_viriferに計算を施した値
11トークンリクエスト
ここで悪意あるアプリの場合はcode_viriferを知らないので、アクセストークンが発行できなくなる
参照