| RFC 9126 | OAuth PAR | 2021年9月 |
| Lodderstedt, et al. | 標準化過程 | [ページ] |
本文書はプッシュ型認可リクエスト (PAR) エンドポイントを定義します。これにより、 クライアントは OAuth 2.0 認可リクエストのペイロードを直接リクエストによって 認可サーバーにプッシュでき、その後の認可エンドポイントへの呼び出しで データへの参照として使用されるリクエスト URI が 提供されます。¶
これはインターネット標準化過程の文書です。¶
本文書はインターネット技術タスクフォース (IETF) の成果物です。これは IETF コミュニティの総意を表しています。本文書は 公開レビューを受け、インターネット技術運営グループ (IESG) によって 公開が承認されています。インターネット標準に関する詳細な 情報は RFC 7841 の第2節で 入手できます。¶
本文書の現在の状態、あらゆる 正誤情報、および本文書へのフィードバックの提供方法に関する情報は https://www.rfc-editor.org/info/rfc9126 で入手できます。¶
Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
本文書は、OAuth [RFC6749] クライアントが 認可リクエストのペイロードを直接 認可サーバーにプッシュできるようにする、プッシュ型認可リクエスト (PAR) エンドポイントを定義します。 その代わりにリクエスト URI 値を受け取ります。これは、その後ユーザーエージェントを介して 認可エンドポイントを呼び出す際に、認可リクエストのペイロードデータへの参照として使用されます。¶
OAuth [RFC6749] では、認可 リクエストパラメーターは通常、ユーザーエージェントでのリダイレクトを介して URI クエリ パラメーターとして送信されます。これは単純ですが、いくつかの課題も生じます:¶
JWT-Secured Authorization Request (JAR) [RFC9101] は、OAuth クライアントが認可リクエスト
パラメーターを、署名され、任意で暗号化された JSON Web Token (JWT) [RFC7519]
であるリクエストオブジェクトにまとめることを可能にし、セキュリティ上の課題に対する解決策を提供します。
サイズ制限に対処するため、JAR は request_uri パラメーターを導入します。これにより、
クライアントはリクエストオブジェクト自体の代わりに、リクエストオブジェクトへの参照を送信できます。¶
本文書は、認可リクエストのペイロードを
認可サーバーに直接プッシュし、その後の認可リクエストで認可サーバーにおいて使用できる
request_uri 値と交換するための相互運用可能な方法を提供することで、JAR を補完します。¶
PAR は、機密性と 完全性が保護された認可リクエストを行うための簡単な手段をクライアントに提供することで、OAuth のセキュリティを促進します。 さらに高いセキュリティレベル、特に暗号学的に確認された否認防止を必要とするクライアントは、 [RFC9101] で定義される JWT ベースのリクエストオブジェクトを PAR と組み合わせて使用できます。¶
PAR により、認可サーバーはユーザーとの 対話が発生する前にクライアントを認証できます。 認可処理中にクライアントの ID に対する確信が高まることで、 認可サーバーは不正なリクエストを処理のより早い段階で拒否でき、 クライアントのなりすましや、認可リクエストの改ざんまたは悪用の試みを防止できます。¶
第3.1節 of [RFC6749] および
[OIDC] の第3.1.2.1節で説明されているように、
ユーザーエージェントを介した認可エンドポイントへの HTTP POST リクエストも、
上記のリクエストサイズ制限に対処するために使用できます。しかし、[RFC6749] では任意であるにすぎず、サポートされている場合でも、
従来の Web アプリケーションでは実用的な選択肢ですが、インストール型モバイルアプリケーションで使用することは
極めて困難です。[RFC8252] で説明されているように、
これらのアプリはプラットフォーム固有の API を使用して、システムブラウザーで認可リクエスト URI を開きます。
しかし、モバイルアプリがブラウザーを起動する場合、その結果となる最初のリクエストは GET
メソッドの使用に制約されます。認可リクエストに POST を使用するには、アプリがまず、
大きな認可リクエストペイロードを何らかの方法で伝達しながら、アプリが制御する URI を GET で
開くようブラウザーに指示し、その結果のレスポンスに、
認可サーバーに向けたクロスサイトのフォーム POST を開始するためのコンテンツとスクリプトを
含める必要があります。PAR はより簡単に使用でき、上記のような追加のセキュリティ上の利点があります。¶
従来の OAuth 2.0 では、クライアントは通常、 ユーザーエージェントに、認可サーバーの認可エンドポイントに対して次のような HTTP リクエストを 行わせることで認可リクエストを開始します(追加の改行とインデントは 表示上の目的のみです):¶
代わりに、このようなリクエストは、
次の例に示すように、クライアントが PAR エンドポイントに POST リクエストを送ることで
認可サーバーに直接プッシュできます(追加の改行と空白は表示上の目的のみです)。
リクエストは認可サーバーに直接行われるため、クライアントは認証できます
(たとえば、ここに示す JWT クライアントアサーションベースの認証を使用します)。¶
認可サーバーはリクエスト URI で応答します:¶
クライアントはリクエスト URI 値を使用して、 ユーザーエージェントに認可サーバーの 認可エンドポイントへ次のような HTTP リクエストを行わせることで、その後の認可 リクエストを作成します(追加の改行とインデントは表示上の目的のみです):¶
本文書におけるキーワード "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] で定義されている「アクセストークン」、 「認可サーバー」、「認可エンドポイント」、 「認可リクエスト」、「トークンエンドポイント」、 および 「クライアント」という用語を使用します。¶
クライアントは、JAR [RFC9101] で定義された
request パラメーターを使用して、リクエストオブジェクト JWT を
認可サーバーにプッシュすることが MAY できます。
JAR [RFC9101] で定義された
リクエストオブジェクトの処理、署名、および暗号化の規則が適用されます。特定のクライアント認証方式で必要な
リクエストパラメーターは、application/x-www-form-urlencoded
リクエストに直接含まれ、フォーム本文内では request 以外に許可される唯一のパラメーターです
(たとえば、相互 TLS クライアント認証 [RFC8705] は
client_id HTTP リクエストパラメーターを使用し、一方 JWT アサーションベースのクライアント認証 [RFC7523] は client_assertion および
client_assertion_type を使用します)。その他すべてのリクエストパラメーター、
すなわち認可リクエスト自体に関するものは、認可リクエストを表す JWT の Claim として
MUST 出現しなければなりません。¶
次は、第2.1節の例と同じ認可リクエストペイロードを持つ、 署名済みリクエストオブジェクトを使用したプッシュ型認可リクエストの例です。 クライアントは JWT クライアントアサーションベースの認証 [RFC7523] で認証されています (追加の改行と空白は表示上の目的のみです):¶
認可サーバーは、第2.1節で定義された 処理規則に加え、次の手順を実行しなければ MUST なりません:¶
client_id が
リクエストオブジェクト内の client_id Claim と一致しなければ、リクエストを拒否する。
さらに、iss Claim に client_id との一致を要求するかどうかは、
認可サーバーの裁量に委ねられます。¶
JSON Web Key (JWK) 形式 [RFC7517] で表現された次の RSA 鍵ペアを、 上記の例のリクエストオブジェクト署名の検証または再生成に使用できます (値内の追加の改行とインデントは表示上の目的のみです):¶
{
"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"
}
¶
PAR に関するサーバーの能力およびポリシーを示すため、 次の認可サーバーメタデータパラメーター [RFC8414] が導入されます。¶
request_uri 値と交換できる
プッシュ型認可リクエストエンドポイントの URL。¶
false です。¶
pushed_authorization_request_endpoint が存在するだけで、
クライアントが PAR フローを使用できると判断するには十分であることに注意してください。PAR エンドポイントから
取得した request_uri 値は、request_uri_parameter_supported や
require_request_uri_registration [OIDC.Disco] などの他の認可サーバーメタデータに関係なく、
認可エンドポイントで使用できます。¶
Dynamic Client Registration Protocol [RFC7591] は、OAuth 2.0 クライアントメタデータを 認可サーバーに動的に登録するための API を定義します。[RFC7591] で定義されたメタデータ、および登録されたその拡張は、 Dynamic Client Registration Protocol を使用しない場合でも、 認可サーバー実装に有用なクライアントの一般的なデータ モデルも暗黙に示しています。このような実装には通常、クライアント設定を 管理するための何らかのユーザーインターフェースがあります。本文書では、 特定のクライアントについてプッシュ型認可リクエストが必要かどうかを示すため、 次のクライアントメタデータパラメーターを導入します。¶
false です。¶
攻撃者は、有効なリクエスト URI 値を推測してリプレイし、 対応するクライアントになりすまそうとする可能性があります。 認可サーバーは、リクエスト URI のエントロピーについて JAR [RFC9101], 第 10.2節 の (d) 項で示されている考慮事項を考慮しなければ MUST なりません。¶
攻撃者は、認可コードを取得したりユーザーに対して他の攻撃を 実行したりするため、自身の制御下にあるサイトを指すリダイレクト URI を登録しようとする可能性があります。 認可サーバーは、認証済みクライアントからのプッシュ型認可リクエストに含まれる 新しいリダイレクト URI のみを受け付けなければ MUST なりません。¶
攻撃者は、正当な 認可リクエストから取得したリクエスト URI をリプレイする可能性があります。このような攻撃に対処するため、 認可サーバーはリクエスト URI を一度限りの使用にするべきです SHOULD。¶
リクエストオブジェクトの登録と、 特定のリクエストオブジェクトを使用する 認可リクエストとの間に、クライアントポリシーが変更される可能性があります。そのため、 認可リクエストを処理する際、認可サーバーが リクエストパラメーターをクライアントポリシーと照合することが推奨されます。¶
攻撃者は、あるリクエストからリクエスト URI を取得し、
それを別の認可リクエストに差し替える可能性があります。たとえば OpenID Connect のコンテキストでは、
攻撃者は、高い認証保証レベルを要求するリクエスト URI を、
より低い保証レベルを要求するものに置き換える可能性があります。クライアントは、
この攻撃を防止するため、プッシュされたリクエストオブジェクト内で
PKCE [RFC7636]、一意の state
パラメーター [RFC6749]、または OIDC の "nonce"
パラメーター [OIDC] を使用するべきです
SHOULD。¶
OAuth 2.0 は、あるエンティティが他の2つの エンティティ間のデータアクセスに対するユーザー認可を仲介するという性質そのものにより、 広範なプライバシー上の影響を持つ複雑で柔軟なフレームワークです。 OAuth 全体のプライバシーに関する考慮事項は、より大きなフレームワーク内の 1つのメッセージシーケンスを開始する代替方法だけを定義する本文書の範囲外です。ただし、 PAR を使用すると、認可リクエストデータを、 ユーザーエージェントを平文で通過する URL のクエリコンポーネントではなく、 HTTP リクエストのメッセージ本文で安全な接続を介してクライアントと認可サーバーの間で直接渡すため、 意図しない情報漏えいの可能性を減らし、プライバシーを向上できる場合があります。¶
IANA は、[RFC7591] によって設立された [IANA.OAuth.Parameters] の IANA "OAuth Dynamic Client Registration Metadata" レジストリに次の値を登録しました。¶
IANA は、[RFC6755] によって 設立された [IANA.OAuth.Parameters] の "OAuth URI" レジストリに次の値を登録しました。¶
本仕様は、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 に感謝します。¶