RFC 9126 OAuth PAR 2021年9月
Lodderstedt, et al. 標準化過程 [ページ]
ストリーム:
Internet Engineering Task Force (IETF)
RFC:
9126
カテゴリ:
標準化過程
公開:
ISSN:
2070-1721
著者:
T. Lodderstedt
yes.com
B. Campbell
Ping Identity
N. Sakimura
NAT.Consulting
D. Tonge
Moneyhub Financial Technology
F. Skokan
Auth0

RFC 9126

OAuth 2.0 プッシュ型認可リクエスト

概要

本文書はプッシュ型認可リクエスト(PAR)エンドポイントを定義する。これにより、 クライアントは OAuth 2.0 認可リクエストのペイロードを、直接リクエストを通じて 認可サーバーへプッシュでき、後続の認可エンドポイントへの呼び出しで そのデータへの参照として使用されるリクエスト URI が クライアントに提供される。

このメモの位置付け

これはインターネット標準化過程文書である。

本文書は Internet Engineering Task Force (IETF) の成果物である。これは IETF コミュニティの合意を 表すものである。本文書は公開レビューを受け、 Internet Engineering Steering Group (IESG) により 発行が承認されている。インターネット標準に関する 詳細情報は RFC 7841 の Section 2 で入手できる。

本文書の現在の状態、正誤表、および フィードバックの提供方法に関する情報は、 https://www.rfc-editor.org/info/rfc9126 で入手できる。

目次

1. 序論

本文書は、OAuth [RFC6749] クライアントが 認可リクエストのペイロードを認可サーバーへ直接 プッシュできるようにする、プッシュ型認可リクエスト(PAR)エンドポイントを定義する。 交換としてリクエスト URI 値が受け取られ、その値は、後続のユーザーエージェント経由での 認可エンドポイントへの呼び出しにおいて、認可リクエストのペイロードデータへの参照として 使用される。

OAuth [RFC6749] では、認可 リクエストパラメーターは通常、ユーザーエージェントでのリダイレクトを通じて URI クエリ パラメーターとして送信される。これは単純である一方、次のような課題も生じる。

JWT-Secured Authorization Request(JAR)[RFC9101] は、OAuth クライアントが認可リクエストパラメーターを Request Object でラップできるようにすることで、セキュリティ上の課題に対する解決策を提供する。 Request Object は、署名され、任意で暗号化された JSON Web Token(JWT) [RFC7519] である。 サイズ制限に対処するため、JAR は request_uri パラメーターを導入している。 これにより、クライアントは Request Object そのものではなく、Request Object への参照を 送信できる。

本文書は、認可リクエストのペイロードを認可サーバーへ直接プッシュし、 後続の認可リクエストで認可サーバーにおいて使用可能な request_uri 値と 交換するための相互運用可能な方法を提供することにより、JAR を補完する。

PAR は、機密性があり完全性が保護された認可リクエストを行うための単純な手段を クライアントに提供することで、OAuth のセキュリティを促進する。さらに高いセキュリティレベル、 特に暗号学的に確認された否認防止を必要とするクライアントは、[RFC9101] で定義される JWT ベースの Request Object を PAR と併用できる。

PAR により、認可サーバーは、ユーザー操作が発生する前にクライアントを認証できる。 認可プロセス中にクライアントの身元に対する信頼度が高まることで、認可サーバーは、 プロセスのかなり早い段階で不正なリクエストを拒否できるようになり、クライアントのなりすましや、 その他の方法による認可リクエストの改ざんまたは悪用の試みを防止できる。

[RFC6749] の Section 3.1 および [OIDC] の Section 3.1.2.1 で説明されているように、 ユーザーエージェント経由で認可エンドポイントへ HTTP POST リクエストを行うことも、 上記のリクエストサイズ制限に対処するために使用できることに注意する。しかし、それは [RFC6749] において任意にすぎず、サポートされている場合でも、 従来型の Web アプリケーションでは実行可能な選択肢である一方、インストール型モバイル アプリケーションで使用することは極めて困難である。[RFC8252] で説明されているように、それらのアプリは、システムブラウザーで認可リクエスト URI を開くために、 プラットフォーム固有の API を使用する。しかし、モバイルアプリがブラウザーを起動すると、 結果として生じる最初のリクエストは GET メソッドの使用に制約される。認可リクエストに POST を使用するには、アプリがまず、サイズの大きい認可リクエストペイロードを何らかの方法で 伝えつつ、GET によってアプリが制御する URI をブラウザーに開かせ、その結果のレスポンスに、 認可サーバーへクロスサイトフォーム POST を開始するためのコンテンツとスクリプトを 含める必要がある。PAR は、上記のように使用がより単純であり、追加のセキュリティ上の利点を持つ。

1.1. 導入例

従来型の OAuth 2.0 では、クライアントは通常、ユーザーエージェントに 次のような HTTP リクエストを認可サーバーの認可エンドポイントへ行わせることにより、 認可リクエストを開始する(追加の改行とインデントは表示目的のみ)。

 GET /authorize?response_type=code
  &client_id=CLIENT1234&state=duk681S8n00GsJpe7n9boxdzen
  &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb HTTP/1.1
 Host: as.example.com

そのようなリクエストは、代わりにクライアントから PAR エンドポイントへの POST リクエストによって、認可サーバーへ直接プッシュできる。次の例に示す (追加の改行とスペースは表示目的のみ)。 リクエストは認可サーバーへ直接行われるため、クライアントは認証できる (たとえば、ここに示すように JWT クライアントアサーションベースの認証を使用する)。

 POST /as/par HTTP/1.1
 Host: as.example.com
 Content-Type: application/x-www-form-urlencoded

 &response_type=code
 &client_id=CLIENT1234&state=duk681S8n00GsJpe7n9boxdzen
 &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
 &client_assertion_type=
  urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
 &client_assertion=eyJraWQiOiI0MiIsImFsZyI6IkVTMjU2In0.eyJpc3MiOiJDTE
  lFTlQxMjM0Iiwic3ViIjoiQ0xJRU5UMTIzNCIsImF1ZCI6Imh0dHBzOi8vc2VydmVyL
  mV4YW1wbGUuY29tIiwiZXhwIjoxNjI1ODY4ODc4fQ.Igw8QrpAWRNPDGoWGRmJumLBM
  wbLjeIYwqWUu-ywgvvufl_0sQJftNs3bzjIrP0BV9rRG-3eI1Ksh0kQ1CwvzA

認可サーバーは、リクエスト URI で応答する。

 HTTP/1.1 201 Created
 Cache-Control: no-cache, no-store
 Content-Type: application/json

 {
   "request_uri": "urn:example:bwc4JK-ESC0w8acc191e-Y1LTC2",
   "expires_in": 90
 }

クライアントは、リクエスト URI 値を使用して後続の認可リクエストを 作成し、ユーザーエージェントに次のような HTTP リクエストを認可サーバーの 認可エンドポイントへ行わせる(追加の改行とインデントは表示目的のみ)。

 GET /authorize?client_id=CLIENT1234
  &request_uri=urn%3Aexample%3Abwc4JK-ESC0w8acc191e-Y1LTC2 HTTP/1.1
 Host: as.example.com

1.2. 規約と 用語

本文書におけるキーワード「MUST」、「MUST NOT」、「REQUIRED」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「NOT RECOMMENDED」、 「MAY」、および「OPTIONAL」は、 ここに示すようにすべて大文字で現れる場合に限り、 BCP 14 [RFC2119] [RFC8174] で説明されるとおりに解釈される。

本仕様は、「The OAuth 2.0 Authorization Framework」[RFC6749] で定義される 「access token」、「authorization server」、「authorization endpoint」、 「authorization request」、「token endpoint」、および「client」という用語を使用する。

2. プッシュ型認可リクエストエンドポイント

プッシュ型認可リクエストエンドポイントは、認可サーバー上の HTTP API であり、 HTTP リクエストメッセージボディ内のパラメーターを application/x-www-form-urlencoded 形式で含む HTTP POST リクエストを受け付ける。この形式の文字エンコーディングは、 [RFC6749] の Appendix B で説明されているように UTF-8 である。PAR エンドポイント URL は 「https」スキームを使用MUST する。

PAR をサポートする認可サーバーは、Section 5 で定義される pushed_authorization_request_endpoint パラメーターを使用して、認可サーバーメタデータ文書 [RFC8414] にプッシュ型認可リクエストエンドポイントの URL を 含めるSHOULD である。

このエンドポイントは、[RFC6749] で認可エンドポイント向けに定義された 認可リクエストパラメーター、および認可エンドポイント向けに定義された適用可能なすべての拡張を 受け付ける。そのような拡張の例には、Proof Key for Code Exchange(PKCE) [RFC7636]、Resource Indicators [RFC8707]、および OpenID Connect(OIDC) [OIDC] が含まれる。このエンドポイントは、 [RFC9101] および本文書の Section 3 に従って、認可リクエストパラメーターの集合を Request Object として送信することも サポートMAY する。

トークンエンドポイントリクエストについて [RFC6749] で定義されているクライアント認証の規則は、適用可能な 認証方式を含めて、PAR エンドポイントにも適用される。該当する場合、token_endpoint_auth_method クライアントメタデータパラメーター [RFC7591] は、PAR エンドポイントへのリクエストを含め、認可サーバーへ 直接リクエストを行う際にクライアントが使用する登録済み認証方式を示す。同様に、 token_endpoint_auth_methods_supported 認可サーバーメタデータ [RFC8414] パラメーターは、PAR エンドポイントへの リクエストを含め、クライアントからの直接リクエストを受け付ける際に認可サーバーがサポートする クライアント認証方式を列挙する。

歴史的な理由により、JWT クライアントアサーションベースの認証([RFC7523] の Section 2.2 で定義され、 [OIDC] の Section 9 に従う private_key_jwt または client_secret_jwt 認証方式名を用いるもの)を使用する場合、用いるべき適切な audience 値に関して曖昧さが生じる可能性がある。その曖昧さに対処するため、[RFC8414] に 従う認可サーバーの issuer 識別子 URL を audience の値として使用SHOULD する。相互運用性を促進するため、認可サーバーは、その issuer 識別子、 トークンエンドポイント URL、またはプッシュ型認可リクエストエンドポイント URL を、意図された audience として 自身を識別する値として受け付けMUST る。

2.1. リクエスト

クライアントは、認可リクエストを構成するパラメーターを PAR エンドポイントへ直接 送信する。典型的なパラメーター集合には、次の例に示すように、client_idresponse_typeredirect_uriscopestatecode_challenge、および code_challenge_method が含まれることがある。 ただし、プッシュ型認可リクエストは、[RFC6749] で定義されたもの、および すべての適用可能な拡張を含め、認可エンドポイントで使用可能な任意のパラメーターで構成できる。 request_uri 認可リクエストパラメーターは例外であり、提供されては MUST NOT ならない。

リクエストには、対象クライアントに応じて、クライアント認証に必要な追加 パラメーター(例:client_secret、または client_assertionclient_assertion_type)も含まれる。 そのようなパラメーターはトークンエンドポイントでの使用向けに定義・登録されているが、 クライアント認証にのみ適用される。プッシュ型認可リクエストに存在する場合、それらは クライアント認証のためにのみ依拠され、認可リクエスト自体には関係しない。クライアント認証に 関連しないトークンエンドポイントパラメーターは、プッシュ型認可リクエストにおいて定義された 意味を持たない。client_id パラメーターは、認可リクエストとトークンエンドポイントへの リクエストの両方において同じ意味で定義されている。必須の認可リクエストパラメーターとして、 プッシュ型認可リクエストでも同様に必須である。

クライアントは、[RFC6749] の Appendix B で説明されているように、UTF-8 の文字エンコーディングを使用して、 x-www-form-urlencoded 形式のパラメーターで HTTP POST リクエストの メッセージボディを構築する。該当する場合、クライアントはトークンエンドポイントリクエストと 同じ規則を使用して、自身の認証資格情報をリクエストヘッダーまたはリクエストボディに追加する。

これは次の例で示される(メッセージボディ内の追加の改行は表示目的のみ)。

 POST /as/par HTTP/1.1
 Host: as.example.com
 Content-Type: application/x-www-form-urlencoded

 response_type=code&state=af0ifjsldkj&client_id=s6BhdRkqt3
 &redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
 &code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bww-uCHaoeK1t8U
 &code_challenge_method=S256&scope=account-information
 &client_assertion_type=
  urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
 &client_assertion=eyJraWQiOiJrMmJkYyIsImFsZyI6IlJTMjU2In0.eyJpc3Mi
  OiJzNkJoZFJrcXQzIiwic3ViIjoiczZCaGRSa3F0MyIsImF1ZCI6Imh0dHBzOi8vc
  2VydmVyLmV4YW1wbGUuY29tIiwiZXhwIjoxNjI1ODY5Njc3fQ.te4IdnP_DK4hWrh
  TWA6fyhy3fxlAQZAhfA4lmzRdpoP5uZb-E90R5YxzN1YDA8mnVdpgj_Bx1lG5r6se
  f5TlckApA3hahhC804dcqlE4naEmLISmN1pds2WxTMOUzZY8aKKSDzNTDqhyTgE-K
  dTb3RafRj7tdZb09zWs7c_moOvfVcQIoy5zz1BvLQKW1Y8JsYvdpu2AvpxRPbcP8W
  yeW9B6PL6_fy3pXYKG3e-qUcvPa9kan-mo9EoSgt-YTDQjK1nZMdXIqTluK9caVJE
  RWW0fD1Y11_tlOcJn-ya7v7d8YmFyJpkhZfm8x1FoeH0djEicXTixEkdRuzsgUCm6
  GQ

認可サーバーは、リクエストを次のように処理MUST する。

  1. トークンエンドポイントでの場合と同じ方法でクライアントを認証する ([RFC6749] の Section 2.3)。
  2. request_uri 認可リクエストパラメーターが提供されている場合、 リクエストを拒否する。
  3. プッシュされたリクエストを、認可エンドポイントへ送信された 認可リクエストと同様に検証する。たとえば、認可サーバーは、リダイレクト URI が クライアントに設定されたリダイレクト URI のいずれかと一致するかを確認し、また クライアントがアクセスを要求している scope について認可されているかも確認する。 この検証により、認可サーバーは不正または詐欺的なリクエストを早期に拒否できる。 認可サーバーは、プッシュされたリクエストを処理する際に実行できない検証ステップを 省略MAY する。ただし、そのような確認は、認可エンドポイントで認可リクエストを 処理する際に実行MUST される。

認可サーバーは、認証資格情報を持つクライアントに対して、各プッシュ型 認可リクエストで認可リクエストごとのリダイレクト URI を確立することを許可 MAY する。Section 2.4 でより詳しく説明するように、これは、[RFC6749] とは異なり、本仕様が、実際の 認可リクエストが実行される前にクライアントを認証し、クライアントリクエストを検証する能力を 認可サーバーに与えるため可能である。

2.2. 成功レスポンス

検証が成功した場合、サーバーはリクエスト URI を生成し、それを 201 HTTP ステータスコード付きのレスポンスで提供MUST する。 HTTP レスポンスのメッセージボディには、[RFC8259] で定義される application/json メディアタイプを使用して、次のパラメーターがトップレベルメンバーとして 含まれる。

request_uri
投稿された認可リクエストに対応する リクエスト URI。この URI は、後続の認可リクエストにおいてそれぞれのリクエストデータへの 単回使用の参照である。認可プロセスが認可リクエストデータを取得する方法は 認可サーバーの裁量に委ねられ、本仕様の範囲外である。この URI を介して認可リクエストデータを 他の当事者に利用可能にする必要はない。
expires_in
リクエスト URI の有効期間を秒単位の 正の整数として表す JSON 数値。リクエスト URI の有効期間は認可サーバーの裁量に委ねられるが、 通常は比較的短い(例:5 秒から 600 秒の間)。

request_uri 値の形式は認可サーバーの裁量に委ねられるが、 有効な値を予測または推測することが計算上不可能となるよう、暗号学的に強い疑似乱数 アルゴリズムを使用して生成された部分を含めMUST る(詳細については [RFC6749] の Section 10.10 を参照)。認可サーバーは、<reference-value> を それぞれの認可リクエストデータを参照する URI のランダム部分として、 urn:ietf:params:oauth:request_uri:<reference-value> の形式を使用して request_uri 値を構築MAY する。

request_uri 値は、認可リクエストを投稿したクライアントに バインドされMUST る。

以下は、そのようなレスポンスの例である。

 HTTP/1.1 201 Created
 Content-Type: application/json
 Cache-Control: no-cache, no-store

 {
  "request_uri":
    "urn:ietf:params:oauth:request_uri:6esc_11ACC5bwc014ltc14eY22c",
  "expires_in": 60
 }

2.3. エラーレスポンス

認可サーバーは、[RFC6749] の Section 5.2 でトークンエンドポイントからのエラーレスポンスについて規定されているものと同じ形式で、 そこにある適切なエラーコード、または [RFC6749] の Section 4.1.2.1 のエラーコードを使用して、 エラーレスポンスを返す。[RFC6749] の Section 4.1.2.1 が、要求元クライアントへエラーを伴う自動リダイレクトを禁止し、 したがってエラーコードを定義していない場合(たとえば、リクエストが欠落した、無効な、または 一致しないリダイレクト URI によって失敗する場合)、invalid_request エラーコードを 既定のエラーコードとして使用できる。プッシュされた認可リクエストの初期処理に OAuth 拡張が 関与する場合、その拡張で定義されたエラーコードも使用できる。プッシュされた認可リクエストの 初期処理にはリソース所有者との対話が含まれないため、[OIDC] で定義される consent_required など、ユーザー操作に 関連するエラーコードは決して返されない。

認可サーバーまたはクライアントポリシー([RFC9101], Section 10.5 を参照)のいずれかによって、クライアントが署名済み Request Object を使用する必要がある場合、認可サーバーは Section 3 で与えられた定義に準拠するリクエストのみを 受け付けMUST、その他のリクエストを HTTP ステータスコード 400 およびエラーコード invalid_request で拒否MUST する。

上記に加えて、PAR エンドポイントは次の HTTP ステータスコードも使用できる。

405:
リクエストが POST メソッドを使用していない場合、認可サーバーは HTTP 405(Method Not Allowed)ステータスコードで応答する。
413:
リクエストサイズが認可サーバーの許容する 上限を超えている場合、認可サーバーは HTTP 413(Payload Too Large)ステータスコードで応答する。
429:
特定の期間におけるクライアントからの リクエスト数が、認可サーバーの許可する数を超えている場合、認可サーバーは HTTP 429 (Too Many Requests)ステータスコードで応答する。

以下は、PAR エンドポイントからのエラーレスポンスの例である。

 HTTP/1.1 400 Bad Request
 Content-Type: application/json
 Cache-Control: no-cache, no-store

 {
   "error": "invalid_request",
   "error_description":
     "The redirect_uri is not valid for the given client"
 }

2.4. クライアントの リダイレクト URI の管理

OAuth 2.0 [RFC6749] では、 一定の状況においてクライアントが未登録の redirect_uri 値を使用すること、 または認可サーバーが認可エンドポイントでクライアントから提示された redirect_uri 値に 独自のマッチング意味論を適用することを許している。しかし、OAuth security BCP [OAUTH-SECURITY-TOPICS] および OAuth 2.1 仕様 [OAUTH-V2] は、認可サーバーが redirect_uri パラメーターを、 特定のクライアントに対して事前に確立されたリダイレクト URI の集合と完全一致させることを 要求している。これは、クライアントなりすましの試みを早期に検出する手段であり、 トークン漏えいとオープンリダイレクトを防止する。一方で、リダイレクト URI は通常 クライアントポリシーの中で最も変動しやすい部分であるため、クライアント管理がより煩雑に なり得るという欠点がある。

PAR を使用しており、認可サーバーとの間に認証資格情報を確立している クライアントについては、完全一致要件を緩和MAY できる。 これは、従来型の認可リクエストとは異なり、認可サーバーが認可プロセスの開始前に クライアントを認証し、したがって正当なクライアントとやり取りしていることを保証するため 可能である。認可サーバーは、そのようなクライアントに対して、認可サーバーに事前登録されていない redirect_uri 値を指定することを許可MAY する。これにより、クライアントは(たとえば実行時に認可サーバーごとに 異なる redirect_uri 値を生成するなど)より柔軟になり、クライアント管理を簡素化できる。 供給された redirect_uri 値に制限を適用するかどうかは認可サーバーの裁量に委ねられる。 たとえば、認可サーバーは特定の URI プレフィックスを要求MAY する、または 実行時にクエリパラメーターのみが変化することを許可MAY する。

3. 「request」リクエストパラメーター

クライアントは、JAR [RFC9101] で 定義される request パラメーターを使用して、Request Object JWT を認可サーバーへ プッシュMAY できる。JAR [RFC9101] で定義される Request Object の処理、署名、および暗号化に関する規則が適用される。 対象のクライアント認証方式によって要求されるリクエストパラメーターは、 application/x-www-form-urlencoded リクエストに直接含まれ、フォームボディ内で request 以外の唯一のパラメーターとなる(例:相互 TLS クライアント認証 [RFC8705]client_id HTTP リクエストパラメーターを使用し、JWT アサーションベースの クライアント認証 [RFC7523]client_assertionclient_assertion_type を使用する)。その他すべてのリクエストパラメーター、すなわち 認可リクエスト自体に関係するものは、認可リクエストを表す JWT のクレームとして現れ MUST る。

以下は、Section 2.1 の例と同じ認可リクエストペイロードを持つ、署名済み Request Object を使用したプッシュ型認可リクエストの例である。クライアントは JWT クライアント アサーションベースの認証 [RFC7523] によって 認証される(追加の改行とスペースは表示目的のみ)。

 POST /as/par HTTP/1.1
 Host: as.example.com
 Content-Type: application/x-www-form-urlencoded

 client_assertion_type=
  urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
 &client_assertion=eyJraWQiOiJrMmJkYyIsImFsZyI6IlJTMjU2In0.eyJpc3Mi
  OiJzNkJoZFJrcXQzIiwic3ViIjoiczZCaGRSa3F0MyIsImF1ZCI6Imh0dHBzOi8vc
  2VydmVyLmV4YW1wbGUuY29tIiwiZXhwIjoxNjI1ODY5Njc3fQ.te4IdnP_DK4hWrh
  TWA6fyhy3fxlAQZAhfA4lmzRdpoP5uZb-E90R5YxzN1YDA8mnVdpgj_Bx1lG5r6se
  f5TlckApA3hahhC804dcqlE4naEmLISmN1pds2WxTMOUzZY8aKKSDzNTDqhyTgE-K
  dTb3RafRj7tdZb09zWs7c_moOvfVcQIoy5zz1BvLQKW1Y8JsYvdpu2AvpxRPbcP8W
  yeW9B6PL6_fy3pXYKG3e-qUcvPa9kan-mo9EoSgt-YTDQjK1nZMdXIqTluK9caVJE
  RWW0fD1Y11_tlOcJn-ya7v7d8YmFyJpkhZfm8x1FoeH0djEicXTixEkdRuzsgUCm6
  GQ
 &request=eyJraWQiOiJrMmJkYyIsImFsZyI6IlJTMjU2In0.eyJpc3MiOiJzNkJoZ
  FJrcXQzIiwiYXVkIjoiaHR0cHM6Ly9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJleHAiOj
  E2MjU4Njk2NzcsInJlc3BvbnNlX3R5cGUiOiJjb2RlIiwiY2xpZW50X2lkIjoiczZ
  CaGRSa3F0MyIsInJlZGlyZWN0X3VyaSI6Imh0dHBzOi8vY2xpZW50LmV4YW1wbGUu
  b3JnL2NiIiwic2NvcGUiOiJhY2NvdW50LWluZm9ybWF0aW9uIiwic3RhdGUiOiJhZ
  jBpZmpzbGRraiIsImNvZGVfY2hhbGxlbmdlIjoiSzItbHRjODNhY2M0aDBjOXc2RV
  NDX3JFTVRKM2J3dy11Q0hhb2VLMXQ4VSIsImNvZGVfY2hhbGxlbmdlX21ldGhvZCI
  6IlMyNTYifQ.l9R3RC9bFBHry_8acObQjEf4fX5yfJkWUPfak3J3iiBm0aaQznPw5
  BZ0B3VQZ9_KYdPt5bTkaflS5fSDklM3_7my9MyOSKFYmf46INk6ju_qUuC2crkOQX
  ZWYJB-0bnYEbdHpUjazFSUvN49cEGstNQeE-dKDWHNgEojgcuNA_pjKfL9VYp1dEA
  6-WjXZ_OlJ7R_mBWpjFAzc0UkQwqX5hfOJoGTqB2tE4a4aB2z8iYlUJp0DeeYp_hP
  N6svtmdvte73p5bLGDFpRIlmrBQIAQuxiS0skORpXlS0cBcgHimXVnXOJG7E-A_lS
  _5y54dVLQPA1jKYx-fxbYSG7dp2fw
 &client_id=s6BhdRkqt3

認可サーバーは、Section 2.1 で定義された 処理規則に加えて、次の手順を実行MUST する。

  1. 該当する場合、JAR [RFC9101], Section 6.1 で規定されるように Request Object を復号する。
  2. JAR [RFC9101], Section 6.2 で規定されるように Request Object の署名を検証する。
  3. クライアントが認可サーバーとの間に認証資格情報を確立している場合、 認証された client_id が Request Object 内の client_id クレームと 一致しなければ、リクエストを拒否する。さらに、iss クレームが client_id と一致することを要求するかどうかは、認可サーバーの裁量に委ねられる。

JSON Web Key(JWK)形式 [RFC7517] で表現された次の RSA 鍵ペアは、 上記の例における Request Object の署名を検証または再作成するために使用できる (値内の追加の改行とインデントは表示目的のみ)。

 {
   "kty": "RSA",
   "kid":"k2bdc",
   "n": "y9Lqv4fCp6Ei-u2-ZCKq83YvbFEk6JMs_pSj76eMkddWRuWX2aBKGHAtKlE
         5P7_vn__PCKZWePt3vGkB6ePgzAFu08NmKemwE5bQI0e6kIChtt_6KzT5Oa
         aXDFI6qCLJmk51Cc4VYFaxgqevMncYrzaW_50mZ1yGSFIQzLYP8bijAHGVj
         dEFgZaZEN9lsn_GdWLaJpHrB3ROlS50E45wxrlg9xMncVb8qDPuXZarvghL
         L0HzOuYRadBJVoWZowDNTpKpk2RklZ7QaBO7XDv3uR7s_sf2g-bAjSYxYUG
         sqkNA9b3xVW53am_UZZ3tZbFTIh557JICWKHlWj5uzeJXaw",
   "e": "AQAB",
   "d": "LNwG_pCKrwowALpCpRdcOKlSVqylSurZhE6CpkRiE9cpDgGKIkO9CxPlXOL
         zjqxXuQc8MdMqRQZTnAwgd7HH0B6gncrruV3NewI-XQV0ckldTjqNfOTz1V
         Rs-jE-57KAXI3YBIhu-_0YpIDzdk_wBuAk661Svn0GsPQe7m9DoxdzenQu9
         O_soewUhlPzRrTH0EeIqYI715rwI3TYaSzoWBmEPD2fICyj18FF0MPy_SQz
         k3noVUUIzfzLnnJiWy_p63QBCMqjRoSHHdMnI4z9iVpIwJWQ3jO5n_2lC2-
         cSgwjmKsFzDBbQNJc7qMG1N6EssJUwgGJxz1eAUFf0w4YAQ",
   "qi": "J-mG0swR4FTy3atrcQ7dd0hhYn1E9QndN-
         -sDG4EQO0RnFj6wIefCvwIc4
         7hCtVeFnCTPYJNc_JyV-mU-9vlzS5GSNuyR5qdpsMZXUMpEvQcwKt23ffPZ
         YGaqfKyEesmf_Wi8fFcE68H9REQjnniKrXm7w2-IuG_IrVJA9Ox-uU",
   "q": "4hlMYAGa0dvogdK1jnxQ7J_Lqpqi99e-AeoFvoYpMPhthChTzwFZO9lQmUo
         BpMqVQTws_s7vWGmt7ZAB3ywkurf0pV7BD0fweJiUzrWk4KJjxtmP_auuxr
         jvm3s2FUGn6f0wRY9Z8Hj9A7C72DnYCjuZiJQMYCWDsZ8-d-L1a-s",
   "p": "5sd9Er3I2FFT9R-gy84_oakEyCmgw036B_nfYEEOCwpSvi2z7UcIVK3bSEL
         5WCW6BNgB3HDWhq8aYPirwQnqm0K9mX1E-4xM10WWZ-rP3XjYpQeS0Snru5
         LFVWsAzi-FX7BOqBibSAXLdEGXcXa44l08iec_bPD3xduq5V_1YoE",
   "dq": "Nz2PF3XM6bEc4XsluKZO70ErdYdKgdtIJReUR7Rno_tOZpejwlPGBYVW19
         zpAeYtCT82jxroB2XqhLxGeMxEPQpsz2qTKLSe4BgHY2ml2uxSDGdjcsrbb
         NoKUKaN1CuyZszhWl1n0AT_bENl4bJgQj_Fh0UEsQj5YBBUJt5gr_k",
   "dp": "Zc877jirkkLOtyTs2vxyNe9KnMNAmOidlUc2tE_-0gAL4Lpo1hSwKCtKwe
         ZJ-gkqt1hT-dwNx_0Xtg_-NXsadMRMwJnzBMYwYAfjApUkfqABc0yUCJJl3
         KozRCugf1WXkU9GZAH2_x8PUopdNUEa70ISowPRh04HANKX4fkjWAE"
  }

4. 認可リクエスト

クライアントは、認可サーバーから返された request_uri 値を使用して、 [RFC9101] で定義される認可リクエストを構築する。これは、クライアントが ユーザーエージェントに次の HTTP リクエストを行わせる次の例に示される (追加の改行とインデントは表示目的のみ)。

 GET /authorize?client_id=s6BhdRkqt3&request_uri=urn%3Aietf%3Aparams
  %3Aoauth%3Arequest_uri%3A6esc_11ACC5bwc014ltc14eY22c HTTP/1.1
 Host: as.example.com

code_challenge パラメーター値など、認可リクエスト内容の一部は 特定の認可リクエストに固有であるため、クライアントは request_uri 値を一度だけ使用 MUST する。認可サーバーは request_uri 値を単回使用として扱う SHOULD であるが、ユーザーがユーザーエージェントをリロード/更新したことによる 重複リクエストを許可MAY する。期限切れの request_uri は無効として拒否され MUST る。

認可サーバーは、プッシュされたリクエストから生じる認可リクエストを、 他の認可リクエストと同様に検証MUST する。認可サーバーは、 リクエストがプッシュされたリクエストであったこと、およびそのリクエストまたは認可サーバーの ポリシーが、省略されたステップの結果に影響するように変更されていないことを検証できる場合、 リクエストがプッシュされた際に実行した検証ステップを省略 MAY する。

認可サーバーポリシーは、グローバルに、またはクライアントごとに、クライアントが 認可リクエストデータを渡す唯一の手段として PAR を使用することを定めMAY る。 この場合、認可サーバーは、PAR エンドポイントから取得した値を持つ request_uri パラメーターを含まない認可エンドポイントへのリクエストの処理を、invalid_request エラーコードを使用して拒否する。

5. 認可サーバーメタデータ

PAR に関するサーバーの機能とポリシーを通知するため、次の認可サーバーメタデータ パラメーター [RFC8414] が導入される。

pushed_authorization_request_endpoint
クライアントが、認可サーバーで使用可能な request_uri 値と交換するために認可リクエストを投稿できる、プッシュ型認可リクエスト エンドポイントの URL。
require_pushed_authorization_requests
認可サーバーが PAR 経由でのみ認可リクエストデータを 受け付けるかどうかを示す Boolean パラメーター。省略された場合、既定値は false である。

pushed_authorization_request_endpoint が存在することは、クライアントが PAR フローを使用できると判断するのに十分であることに注意する。PAR エンドポイントから取得された request_uri 値は、request_uri_parameter_supportedrequire_request_uri_registration [OIDC.Disco] など他の認可サーバーメタデータにかかわらず、 認可エンドポイントで使用可能である。

6. クライアントメタデータ

Dynamic Client Registration Protocol [RFC7591] は、OAuth 2.0 クライアントメタデータを認可サーバーへ 動的に登録するための API を定義している。[RFC7591] で定義されるメタデータ、およびそれに対する登録済み拡張は、 Dynamic Client Registration Protocol が使用されていない場合であっても、認可サーバー実装にとって 有用なクライアントの一般的なデータモデルも暗黙に示す。そのような実装では通常、クライアント設定を 管理するために何らかのユーザーインターフェイスが利用可能である。次のクライアントメタデータ パラメーターは、対象クライアントに対してプッシュ型認可リクエストが要求されるかどうかを示すため、 本文書によって導入される。

require_pushed_authorization_requests
クライアントが認可リクエストを開始するために 使用を許可される唯一の手段が PAR であるかどうかを示す Boolean パラメーター。 省略された場合、既定値は false である。

7. セキュリティ上の考慮事項

7.1. リクエスト URI の推測

攻撃者は、有効なリクエスト URI 値を推測してリプレイし、 対応するクライアントになりすまそうとする可能性がある。 認可サーバーは、リクエスト URI のエントロピーに関する JAR [RFC9101], Section 10.2 の条項 (d) で示される考慮事項を考慮に入れ MUST る。

7.2. オープンリダイレクト

攻撃者は、認可コードを取得したり、ユーザーに対して他の攻撃を開始したり するために、自身の制御下にあるサイトを指すリダイレクト URI を登録しようとする可能性がある。 認可サーバーは、認証済みクライアントからのプッシュ型認可リクエストにおける新しい リダイレクト URI のみを受け付けMUST る。

7.3. Request Object のリプレイ

攻撃者は、正当な認可リクエストから取得したリクエスト URI をリプレイする 可能性がある。そのような攻撃に対処するため、認可サーバーはリクエスト URI を単回使用にする SHOULD である。

7.4. クライアントポリシーの変更

Request Object の保存と、特定の Request Object を使用する認可リクエストとの 間に、クライアントポリシーが変更される可能性がある。したがって、認可リクエストを処理する際に、 認可サーバーが request パラメーターをクライアントポリシーに照らして確認することが推奨される。

7.5. リクエスト URI のすり替え

攻撃者は、あるリクエストからリクエスト URI を取得し、それを別の認可リクエストに 差し替える可能性がある。たとえば OpenID Connect の文脈では、攻撃者は高い認証保証レベルを 求めるリクエスト URI を、より低い保証レベルを要求するものに置き換える可能性がある。 クライアントは、この攻撃を防止するために、PKCE [RFC7636]、 一意な state パラメーター [RFC6749]、 または OIDC の「nonce」パラメーター [OIDC] を、 プッシュされた Request Object 内で使用SHOULD する。

8. プライバシー上の考慮事項

OAuth 2.0 は複雑で柔軟なフレームワークであり、二つの他のエンティティ間で データアクセスに対するユーザー認可を一つのエンティティが仲介するという性質そのものにより、 広範なプライバシー上の影響を持つ。OAuth 全体のプライバシー上の考慮事項は本文書の範囲外であり、 本文書は、より大きなフレームワークにおける一つのメッセージシーケンスを開始する代替方法のみを 定義する。しかし、PAR を使用すると、認可リクエストデータが、ユーザーエージェントを平文で通過する URL のクエリコンポーネントではなく、HTTP リクエストのメッセージボディ内で、安全な接続を介して クライアントと認可サーバーの間で直接渡されるため、意図しない情報開示の可能性が低減され、 プライバシーが改善される可能性がある。

9. IANA に関する考慮事項

9.1. OAuth 認可 サーバーメタデータ

IANA は、[RFC8414] によって確立された [IANA.OAuth.Parameters] の IANA「OAuth Authorization Server Metadata」レジストリに、次の値を登録した。

メタデータ名:
pushed_authorization_request_endpoint
メタデータ説明:
認可サーバーのプッシュ型 認可リクエストエンドポイントの URL。
変更管理者:
IESG
仕様文書:
RFC 9126 の Section 5
メタデータ名:
require_pushed_authorization_requests
メタデータ説明:
認可サーバーが PAR 経由でのみ認可リクエストを 受け付けるかどうかを示す。
変更管理者:
IESG
仕様文書:
RFC 9126 の Section 5

9.2. OAuth 動的クライアント 登録メタデータ

IANA は、[RFC7591] によって確立された [IANA.OAuth.Parameters] の IANA「OAuth Dynamic Client Registration Metadata」レジストリに、次の値を登録した。

クライアントメタデータ名:
require_pushed_authorization_requests
クライアントメタデータ説明:
クライアントが認可リクエストの開始に PAR を使用することを要求されるかどうかを示す。
変更管理者:
IESG
仕様文書:
RFC 9126 の Section 6

9.3. OAuth URI 登録

IANA は、[RFC6755] によって 確立された [IANA.OAuth.Parameters] の 「OAuth URI」レジストリに、次の値を登録した。

URN:
urn:ietf:params:oauth:request_uri:
一般名:
OAuth Request URI の URN サブ名前空間。
変更管理者:
IESG
仕様文書:
RFC 9126 の Section 2.2

10. 参考文献

10.1. 規定参考文献

[RFC2119]
Bradner, S., "RFC で要件レベルを 示すために使用するキーワード", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC6749]
Hardt, D., Ed., "OAuth 2.0 認可 フレームワーク", RFC 6749, DOI 10.17487/RFC6749, , <https://www.rfc-editor.org/info/rfc6749>.
[RFC8174]
Leiba, B., "RFC 2119 キーワードにおける 大文字と小文字の曖昧さ", BCP 14, RFC 8174, DOI 10.17487/RFC8174, , <https://www.rfc-editor.org/info/rfc8174>.
[RFC8259]
Bray, T., Ed., "JavaScript Object Notation (JSON) データ交換形式", STD 90, RFC 8259, DOI 10.17487/RFC8259, , <https://www.rfc-editor.org/info/rfc8259>.
[RFC8414]
Jones, M., Sakimura, N., and J. Bradley, "OAuth 2.0 認可サーバー メタデータ", RFC 8414, DOI 10.17487/RFC8414, , <https://www.rfc-editor.org/info/rfc8414>.
[RFC9101]
Sakimura, N., Bradley, J., and M. Jones, "OAuth 2.0 認可 フレームワーク: JWT-Secured Authorization Request (JAR)", RFC 9101, DOI 10.17487/RFC9101, , <https://www.rfc-editor.org/info/rfc9101>.

10.2. 参考情報文献

[IANA.OAuth.Parameters]
IANA, "OAuth Parameters", <http://www.iana.org/assignments/oauth-parameters>.
[OAUTH-SECURITY-TOPICS]
Lodderstedt, T., Bradley, J., Labunets, A., and D. Fett, "OAuth 2.0 Security Best Current Practice", 作業中, Internet-Draft, draft-ietf-oauth-security-topics-18, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-18>.
[OAUTH-V2]
Hardt, D., Parecki, A., and T. Lodderstedt, "OAuth 2.1 認可 フレームワーク", 作業中, Internet-Draft, draft-ietf-oauth-v2-1-03, , <https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-03>.
[OIDC]
Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and C. Mortimore, "OpenID Connect Core 1.0 incorporating errata set 1", , <http://openid.net/specs/openid-connect-core-1_0.html>.
[OIDC.Disco]
Sakimura, N., Bradley, J., Jones, M., and E. Jay, "OpenID Connect Discovery 1.0 incorporating errata set 1", , <http://openid.net/specs/openid-connect-discovery-1_0.html>.
[RFC6755]
Campbell, B. and H. Tschofenig, "OAuth のための IETF URN サブ名前空間", RFC 6755, DOI 10.17487/RFC6755, , <https://www.rfc-editor.org/info/rfc6755>.
[RFC7517]
Jones, M., "JSON Web Key (JWK)", RFC 7517, DOI 10.17487/RFC7517, , <https://www.rfc-editor.org/info/rfc7517>.
[RFC7519]
Jones, M., Bradley, J., and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, , <https://www.rfc-editor.org/info/rfc7519>.
[RFC7523]
Jones, M., Campbell, B., and C. Mortimore, "OAuth 2.0 クライアント認証および 認可グラントのための JSON Web Token (JWT) プロファイル", RFC 7523, DOI 10.17487/RFC7523, , <https://www.rfc-editor.org/info/rfc7523>.
[RFC7591]
Richer, J., Ed., Jones, M., Bradley, J., Machulak, M., and P. Hunt, "OAuth 2.0 動的クライアント登録 プロトコル", RFC 7591, DOI 10.17487/RFC7591, , <https://www.rfc-editor.org/info/rfc7591>.
[RFC7636]
Sakimura, N., Ed., Bradley, J., and N. Agarwal, "OAuth パブリッククライアントによる Proof Key for Code Exchange", RFC 7636, DOI 10.17487/RFC7636, , <https://www.rfc-editor.org/info/rfc7636>.
[RFC8252]
Denniss, W. and J. Bradley, "ネイティブアプリのための OAuth 2.0", BCP 212, RFC 8252, DOI 10.17487/RFC8252, , <https://www.rfc-editor.org/info/rfc8252>.
[RFC8705]
Campbell, B., Bradley, J., Sakimura, N., and T. Lodderstedt, "OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens", RFC 8705, DOI 10.17487/RFC8705, , <https://www.rfc-editor.org/info/rfc8705>.
[RFC8707]
Campbell, B., Bradley, J., and H. Tschofenig, "OAuth 2.0 のための Resource Indicators", RFC 8707, DOI 10.17487/RFC8707, , <https://www.rfc-editor.org/info/rfc8707>.

謝辞

本仕様は、OpenID Foundation の Financial-grade API Working Group で実施された Pushed Request Object に関する作業に基づいている。WG のメンバーによる貴重な貢献に感謝する。

本文書に対して貴重なフィードバックを提供してくれた Vladimir Dzhuvinov, Aaron Parecki, Justin Richer, Sascha Preibisch, Daniel Fett, Michael B. Jones, Annabelle Backman, Joseph Heenan, Sean Glencross, Maggie Hung, Neil Madden, Karsten Meyer zu Selhausen, Roman Danyliw, Meral Shirazipour, および Takahiko Kawasaki に感謝する。

著者の連絡先

Torsten Lodderstedt
yes.com
Brian Campbell
Ping Identity
Nat Sakimura
NAT.Consulting
Dave Tonge
Moneyhub Financial Technology
Filip Skokan
Auth0