| RFC 9126 | OAuth PAR | 2021年9月 |
| Lodderstedt, et al. | 標準化過程 | [ページ] |
本文書はプッシュ型認可リクエスト(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 で入手できる。¶
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 クライアントが認可リクエストパラメーターを
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 は、上記のように使用がより単純であり、追加のセキュリティ上の利点を持つ。¶
従来型の 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] で定義される 「access token」、「authorization server」、「authorization endpoint」、 「authorization request」、「token endpoint」、および「client」という用語を使用する。¶
クライアントは、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_assertion と
client_assertion_type を使用する)。その他すべてのリクエストパラメーター、すなわち
認可リクエスト自体に関係するものは、認可リクエストを表す JWT のクレームとして現れ
MUST る。¶
以下は、Section 2.1 の例と同じ認可リクエストペイロードを持つ、署名済み Request Object を使用したプッシュ型認可リクエストの例である。クライアントは JWT クライアント アサーションベースの認証 [RFC7523] によって 認証される(追加の改行とスペースは表示目的のみ)。¶
認可サーバーは、Section 2.1 で定義された 処理規則に加えて、次の手順を実行MUST する。¶
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"
}
¶
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], Section 10.2 の条項 (d) で示される考慮事項を考慮に入れ MUST る。¶
攻撃者は、認可コードを取得したり、ユーザーに対して他の攻撃を開始したり するために、自身の制御下にあるサイトを指すリダイレクト URI を登録しようとする可能性がある。 認可サーバーは、認証済みクライアントからのプッシュ型認可リクエストにおける新しい リダイレクト URI のみを受け付けMUST る。¶
攻撃者は、正当な認可リクエストから取得したリクエスト URI をリプレイする 可能性がある。そのような攻撃に対処するため、認可サーバーはリクエスト URI を単回使用にする SHOULD である。¶
Request Object の保存と、特定の Request Object を使用する認可リクエストとの 間に、クライアントポリシーが変更される可能性がある。したがって、認可リクエストを処理する際に、 認可サーバーが request パラメーターをクライアントポリシーに照らして確認することが推奨される。¶
OAuth 2.0 は複雑で柔軟なフレームワークであり、二つの他のエンティティ間で データアクセスに対するユーザー認可を一つのエンティティが仲介するという性質そのものにより、 広範なプライバシー上の影響を持つ。OAuth 全体のプライバシー上の考慮事項は本文書の範囲外であり、 本文書は、より大きなフレームワークにおける一つのメッセージシーケンスを開始する代替方法のみを 定義する。しかし、PAR を使用すると、認可リクエストデータが、ユーザーエージェントを平文で通過する URL のクエリコンポーネントではなく、HTTP リクエストのメッセージボディ内で、安全な接続を介して クライアントと認可サーバーの間で直接渡されるため、意図しない情報開示の可能性が低減され、 プライバシーが改善される可能性がある。¶
IANA は、[RFC7591] によって確立された [IANA.OAuth.Parameters] の IANA「OAuth Dynamic Client Registration Metadata」レジストリに、次の値を登録した。¶
IANA は、[RFC6755] によって 確立された [IANA.OAuth.Parameters] の 「OAuth URI」レジストリに、次の値を登録した。¶
urn:ietf:params:oauth:request_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 に感謝する。¶