0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OAuth2.0のPKCEについて説明する

0
Last updated at Posted at 2026-03-07

OAuth2.0の拡張仕様の一つであるPKCE(Proof Key for Code Exchange:ピクシーと読む)について説明します。

  • PKCEは何のために使われるか
    • 認可コード横取り攻撃とは
  • PKCEの原理

PKCEは何であるか、何のために使われるか

OAuth2.0の認可コードフローにおいて認可コード横取り攻撃というものがあり、それへの対策方法としてPKCEが使われます。
そのため、まずは認可コード横取り攻撃から説明します。

認可コード横取り攻撃とは

認可コード横取り攻撃とは、

  • (どこで)スマホアプリを持つエンド端末上で、
  • (いつ)認可エンドポイントレスポンスによってアプリが起動される 1 際に、
  • (誰が)同一端末上にインストールされている悪意のあるアプリが、
  • (どのように)想定されたアプリに代わり起動することで、
    認可コードを窃取する攻撃のことです。

まずは、ユーザーがスマホアプリにリソースアクセス許可を与える正常なフローを示します。

次に、悪意のあるアプリが介入し、発行された認可コードが窃取される場合のフローを示します。
悪意のあるアプリは正規のアプリと同じカスタムURLスキーム(図ではtheApp://)で起動するようになっているのがポイントです。悪意のあるアプリはこれによって認可コードを窃取します。

悪意のあるアプリが認可コードを窃取してからは、正規のアプリに成りすましてアクセストークンを取得し、ユーザーリソースにアクセスする等の悪用が考えられます。

この攻撃への対策として仕様が定められたのがPKCEです。

PKCEの原理

繰り返しになりますが認可コード横取り攻撃への対策として使われるのがPKCEです。
PKCEでは既存のフローに加えて以下を実施します。

①アプリは認可EPへのリクエスト時にハッシュ値であるcode_challengeを送る
  • IdPサーバーはこの値を保管する
②アプリはトークンEPへのリクエスト時にハッシュ値の元の値であるcode_verifierを送る
  • IdPサーバーはこの値のハッシュ値を計算しcode_challengeと照合する

本物のアプリであれば、認可EPが受け取ったハッシュ値の元の値をトークン発行時も知っているはずである、という原理です。
以下がchallengeとverifierの照合成功時のフローです。

悪意のあるアプリを登場させてみましょう。
カスタムURLスキームにより認可コードの窃取まではできるものの、その後正しいcode_verifierを用意できずにトークンリクエストが弾かれてしまいます。
アクセストークンが取得できない限り用を成さないので、PKCEは攻撃の対策に成功しています。

以上がPKCEの原理の説明でした。2

  1. アプリの起動にカスタムURLスキーム(図では theApp://action )を利用していることを前提にしています。

  2. code_challenge_methodの存在についてはこの記事では割愛します。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?