図解 PAR : OAuth 2.0 Pushed Authorization Requests

この記事では『**[OAuth 2.0 Pushed Authorization Requests](https://www.rfc-editor.org/rfc/rfc9126.html)**』（通称 **PAR**）を図を用いて説明します。（英語版は[こちら](https://medium.com/@darutk/illustrated-par-oauth-2-0-pushed-authorization-requests-652d71ed5cfb)）

:::note info
2021 年 9 月 16 日追記：PAR が <a href="https://www.rfc-editor.org/rfc/rfc9126.html">RFC 9126</a> になりました。
:::

:one: クライアントアプリケーションと認可サーバーがあります。

![par_ja_01_client_and_authz_server.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/68dd7075-25b5-2e20-2e3c-a0a42adb8290.png)

:two: クライアントアプリケーションは複雑な認可リクエストを抱えています。

![par_ja_02_complex_authz_request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/e9fbc93e-2f09-80fb-cf4c-4d38a27f3d1f.png)

:three: もしも認可サーバーが『OAuth 2.0 Pushed Authorization Requests』（通称 PAR）をサポートしているなら、サーバーは『**Pushed Authorization Request Endpoint**』を公開しています。

![par_ja_03_par_endpoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/a6b4b2b7-ce92-e414-6106-f0d62e82ef28.png)

:four: クライアントアプリケーションは、Pushed Authorization Request Endpoint で複雑な認可リクエストを認可サーバーに登録します。

![par_ja_04_par_request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/adf2ea77-bfc7-fc92-b303-bfef81c6a853.png)

:five: 応答として、登録された認可リクエストを表す『**Request URI**』が発行されます。

![par_ja_05_par_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/73c8a6ee-0cba-9506-3b47-a4eb25099b93.png)

:six: クライアントアプリケーションは Web ブラウザを介して認可サーバーの認可エンドポイントに認可リクエストを送信します。クライアントは複雑な認可リクエストを送る必要はありません。かわりに、発行された Request URI を `request_uri` リクエストパラメーターの値として送るだけで十分です。（『[RFC 9101 JWT-Secured Authorization Request](https://www.rfc-editor.org/rfc/rfc9101.html)』（通称 JAR）が敢えて破った後方互換性を大事に思うなら、`client_id` や `response_type` などの必須リクエストパラメーター群も添えて）

![par_ja_06_authz_request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/d99c4e79-f9e0-7fa1-d3e0-0d2430b19897.png)

:seven: 応答として、認可コード、アクセストークン、ID トークンなどが発行されます。下図では認可コードが発行されています。これは、認可リクエストの `response_type` リクエストパラメーターが `code` を含んでいる場合に起こります。トークン群とフロー群の関係については『[OpenID Connect 全フロー解説](https://qiita.com/TakahikoKawasaki/items/4ee9b55db9f7ef352b47)』を参照してください。

![par_ja_07_authz_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/4ebc3a27-af6e-aad6-ff11-53ec7d361cc2.png)

:eight: クライアントアプリケーションはいつものように認可コードを添えて認可サーバーのトークンエンドポイントにトークンリクエストを送信します。

![par_ja_08_token_request.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/92be0342-4099-e401-c4a1-c9bb02f68b44.png)

:nine: 応答として、アクセストークンおよび条件により ID トークンが発行されます。

![par_ja_09_token_response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/88dd68f6-69df-d75a-d6a4-0a1ce3138570.png)

:ten: まとめのフルカラーダイアグラム。

![par_ja.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/106044/5ffd2c20-b275-8e7e-e337-d10643db65b7.png)

---

新しいユースケースや要望に対応するため、新しい仕様群の開発が続いています。そのような仕様群の中には、認可リクエストを大きくするものがあります。例えば、『**OAuth 2.0 Rich Authorization Requests**』（**RAR**）は複雑な JSON 構造を持つ `authorization_details` リクエストパラメーターを追加し、『**[OpenID Connect for Identity Assurance 1.0](https://openid.net/specs/openid-connect-4-identity-assurance-1_0.html)**』(**IDA**）（私の記事：『[Identity Assurance - eKYC 時代の OpenID Connect](https://qiita.com/TakahikoKawasaki/items/55b54d4b09826a9605e5)）は `claims` リクエストパラメーター（OIDC Core 1.0, [Section 5.5](https://openid.net/specs/openid-connect-core-1_0.html#ClaimsParameter)）の値に、これもまた複雑な JSON 構造を持つ `verified_claims` を挿入しました。

この記事で取り上げた『**[OAuth 2.0 Pushed Authorization Requests](https://www.rfc-editor.org/rfc/rfc9126.html)**』（**PAR**）は、クライアントアプリケーションが大きな認可リクエストを Web ブラウザを介して送る必要がなくなるよう開発されました。加えて、PAR により他の利点ももたらされます。より多くの情報については、PAR 仕様自体や、仕様の著者である [Torsten Lodderstedt 氏](https://medium.com/@torsten_lodderstedt)の記事群（例えば『[Pushed Authorization Requests Draft adopted by OAuth Working Group](https://medium.com/oauth-2/pushed-authorization-requests-draft-adopted-by-oauth-working-group-a1060007150f)』等）を参照してください。

---

私の会社の製品である **[Authlete](https://www.authlete.com/)**（オースリート）は、バージョン 2.2 以降で **PAR、RAR、IDA をサポートしています**（[スペックシート](https://www.authlete.com/ja/legal/spec_sheet/)）。これらの新しい仕様群を試されたい方は、[コンタクトフォーム](https://www.authlete.com/ja/contact/)やメール（sales@authlete.com）でお問い合わせください。