LoginSignup
4
0

More than 3 years have passed since last update.

OAuth 2.0 認可コードグラント+PKCE 概要

Posted at

パブリッククライアント(特にネイティブアプリ)向けグラントタイプとして推奨されているグラントタイプの認可コードグラント+PKCEについて説明する。PKCEは、「Proof Key for Code Exchange」の略でピクシーと読む。

OAuth2.0の概要とその必要性について

OAuth 2.0 認可コードグラント概要」を参照のこと。

OAuth2.0のロールと関係性

OAuth2_関係.png

ロール 説明
リソースオーナー サービスで管理しているリソースの所有者。3rdパーティアプリにアクセス権を委譲して、リソースにアクセスする。
クライアント リソースサーバーを利用するアプリケーション。ユーザーによって委譲されたアクセス権の範囲で、リソースにアクセスする。
リソースサーバー データや機能を提供するサービス。リソースオーナーのリソースを管理し、リソースオーナーが許可したアクセスのみを受け入れる。アクセス権の確認には、アクセストークンを利用する。
認可サーバー 以下の機能を持つサーバー。
・リソースオーナーを認証(リソースオーナーであることを確認)する。
・クライアントのリソースへのアクセスについて、リソースオーナーの同意を得る。
・アクセストークンを発行する。

認可コードグラント+PKCE

認可コードグラント+PKCEとは、認可コードグラントのリクエストに、検証パラメータを追加し、認可コード横取り攻撃を防ぐ手法である。

認可コード横取り攻撃

認可コード横取り攻撃とは、リソースオーナーが所持するデバイスが以下の条件を満たす場合、
1. デバイスには、3rdパーティアプリ(クライアント)と悪意あるアプリがインストールされている。
2. 悪意あるアプリは、クライアントと同じカスタムスキームが設定されている。
3. 悪意あるアプリは、クライアントのクライアントIDを知っている。
悪意あるアプリによって、認可サーバーが発行した認可コードを奪い、その認可コードを使って、アクセストークンを取得されてしまうことを指す。

認可コード横取り攻撃シーケンス

OAuth2_ACG+PKCE_Bad.png

認可コードグラント+PKCE パラメータ

認可コードグラント+PKCEでは、以下の検証用パラメータを認可コードグラントのリクエストに追加する。

パラメータ 説明
code_verifier 長さが43文字、最大128文字までの間の[A-Z]/[a-z]/[0-9]/"-"/"."/"_"/"~"からなるランダムな文字列。
code_challenge code_verifierに対して、code_challenge_methodの計算を施して算出された値
code_challenge_method plainまたは、S256。基本はS256を利用する。
plain:code_challenge=code_verifier
S256:code_challenge=BASE64_URL_ENCODE(SHA256(ASCII(code_verifier)))

認可コードグランド+PKCE シーケンス

OAuth2_ACG+PKCE.png

上記のようにリクエスト送付元をcode_verifierパラメータから検証することで、悪意あるアプリによる認可コードの横取りを防ぐことができる。

参考書籍

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0