Help us understand the problem. What is going on with this article?

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

パブリッククライアント(特にネイティブアプリ)向けグラントタイプとして推奨されているグラントタイプの認可コードグラント+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パラメータから検証することで、悪意あるアプリによる認可コードの横取りを防ぐことができる。

参考書籍

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした