OAuth2・PKCEを用いた認可コード付与方式と認証認可フロー(OAuthダンス)
OAuth2・PKCEを用いた認可コード付与方式と認証認可の処理の流れを説明する。
目次
1.概要
2.登場人物とスキーマ
3.PKCEを用いない「認可コード付与方式」処理シーケンス(OAuthダンス)
4.PKCEを用いた「認可コード付与方式」処理シーケンス(OAuthダンス)
5.ポイント
1.概要
OAuthで規程されたいくつかある認可方式のうち、
『PKCE(Proof Key for Code Exchange:ピクシーと読む)を用いた「認可コード付与方式」』について記載する。
RFC 7636 (Proof Key for Code Exchange by OAuth Public Clients) として定義された仕様であり、
「認可コード横取り攻撃 (authorization code interception attack)」 への対策として考えらたセキュリティの高い仕様である。
悪意のあるアプリケーションに『認可コード』を横取りされた場合に、アクセストークンまで横取りされてしまわないように、
クライアントだけでなく、認可サーバも認可コードのチェック(検証)を取り入れたセキュリティを高めた方式である。
「認可コード付与方式」を用いる場合は、認可サーバがPKCEに対応している場合はPKCEを用いた認可方式が望ましい。
2.登場人物とスキーマ
OAuthで定義された登場人物とその役割は以下の通り。
- 認可サーバ:リソースオーナーの認証および認可を行う
- リソースサーバ:リソースオーナが所有するデータが保管されておりAPIなどで返却する
- リソースオーナー:リソースサーバ内のデータの所有者
- クライアント:保護されたリソースにアクセスするアプリケーション
【主な処理】
①アプリケーションの利用を開始
②認証および認可をリクエスト
③認証(ユーザID、パスワードなど)と認可の依頼
④認証(ログイン)および認可(アプリケーションにAPIサーバの利用範囲の承諾:アクセス権の委譲)の実施
⑤認可コード、アクセストークン、リフレッシュトークンの返却
⑥アクセストークンを添えて保護リソースへアクセス(参照・更新・削除)
⑦有効なアクセストークンであれば事前に認可された範囲内でリソースを返却
⑧画面(保護リソース)の表示など
3.PKCEを用いない「認可コード付与方式」処理シーケンス(OAuthダンス)
※青色枠番号は「登場人物とスキーマ」の番号を示す
4.PKCEを用いた「認可コード付与方式」処理シーケンス(OAuthダンス)
※PKCEのポイントを赤字にて記載
5.ポイント
PKCEを用いた「認可コード付与方式」についてセキュリティを高めるための主なポイントは以下の通り。
- クライアントが生成するランダム値「code_verifier」を用いる。※43~128文字
- (通常は)「code_verifier」をsha256でハッシュ値を求め、認可コード取得時に「code_challenge」を認可サーバに事前にリクエストしておく。※認可サーバが保管
- (悪意のない)本物のクライアントだけが知っている、ハッシュ値を求める前の値「code_verifier」を認可サーバ(トークンエンドポイント)に送信する。
- 認可コードと「code_verifier」を認可サーバで検証(shar256の値と同じになるか)した上で、アクセストークンを返却する。