CONTACT
お問い合わせ

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を用いた「認可コード付与方式」についてセキュリティを高めるための主なポイントは以下の通り。

  1. クライアントが生成するランダム値「code_verifier」を用いる。※43~128文字
  2. (通常は)「code_verifier」をsha256でハッシュ値を求め、認可コード取得時に「code_challenge」を認可サーバに事前にリクエストしておく。※認可サーバが保管
  3. (悪意のない)本物のクライアントだけが知っている、ハッシュ値を求める前の値「code_verifier」を認可サーバ(トークンエンドポイント)に送信する。
  4. 認可コードと「code_verifier」を認可サーバで検証(shar256の値と同じになるか)した上で、アクセストークンを返却する。