PKCE のバックアップソース(No.4)

#author("2023-03-25T16:10:52+09:00","default:k1rou","k1rou")
*PKCE [#ea019304]
**名称 [#ddc1723f]
-Proof Key for Code Exchange by OAuth Public Clients
-ピクシー

**概要 [#mf0ac42e]
-RFC7636
--[[OAuth]]の拡張仕様
-認可コード横取り攻撃対策
-パブリッククライアント(主にスマホアプリ)で[[OAuth]] を利用する場合の[[脆弱性]]を防ぐ仕組み
--攻撃者は認可レスポンスのリダイレクト先(リダイレクトエンドポイント)で待機して認可コードを窃取する
--攻撃者によるトークンリクエストに対してアクセストークンを発行することを防ぐ

*攻撃手法 [#ra075fbb]
+攻撃者が用意した不正なスマホアプリを誤ってインストールさせる
+正規のスマホアプリからの認可リクエストに対する認可サーバからの認可レスポンスを不正アプリが受信して、認可コードを不正に入手する
--認可レスポンスがブラウザ経由でアプリに連携される際に、ブラウザは送り先のアプリをカスタムスキームとクライアントIDで判別する
--不正アプリは正規のアプリと同じカスタムスキームとクライアントIDを利用することで横取りが成立してしまうことがある

*PKCE の仕組み(攻撃の対策方法) [#d2f523a7]
**使うもの [#t0c85ac7]
-検証コードとチャレンジコードを使う
-検証コード
--ランダムな文字列

-チャレンジコード
--検証コードを元に生成する
---plain(検証コードそのまま)
---S256(Base64-URL(SHA-256(検証コード)))

**フロー [#o4138676]
+スマホアプリが認可サーバに送る認可リクエストにチャレンジコードを追加する
+認可サーバはチャレンジコードを保存する
+スマホアプリが認可サーバに送るトークンリクエストに検証コードを追加する
+認可サーバは検証コードを検証する
++検証コードからチャレンジコードを生成する
++生成したチャレンジコードと保存していたチャレンジコードが一致しているか確認する

*関連用語 [#te149d08]
-[[OAuth]]
-[[OAuth2.0]]
-[[FAPI]]