> ## Documentation Index
> Fetch the complete documentation index at: https://docs-dev-actions-triggers-prototype.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Rich Authorization Requests（RAR）を使った認可コードフロー

> 認可コードフローにRich Authorization Requests（RAR）を使用する方法について説明します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  ハイリーレギュレーテッドアイデンティティ機能を使用するには、エンタープライズプランとハイリーレギュレーテッドアイデンティティアドオンが必要です。詳細については、「[Auth0の価格設定](https://auth0.com/pricing/)」を参照してください。
</Callout>

[Rich Authorization Requests (RAR)](https://datatracker.ietf.org/doc/html/draft-ietf-oauth-rar)（リッチ認可要求(RAR)）はOAuth2プロトコルを拡張し、クライアントが認可コードフロー中にエンドユーザーなどのリソース所有者にきめ細かな認可データを要求して取得する方法を提供します。

従来のOAuth2フローでは、通常、クライアントはリソースサーバーから一連のスコープへのアクセスを要求し、リソース所有者はそれらのリソースへのアクセスをクライアントに許可します。ただし、このアプローチでは、クライアントに許可されたアクセスをきめ細かく制御できず、アクセスの過剰プロビジョニングにつながる可能性があります。これにより、セキュリティリスクが発生する可能性があります。

RARを使用すると、クライアントは`authorization_details`パラメーターを渡して、アクセスするリソースごとに特定の権限を要求できます。これにより、アクセスをよりきめ細かく制御でき、過剰プロビジョニングに関連するセキュリティリスクを軽減できます。

全体として、RARはOAuth2プロトコルの強力な拡張機能であり、クライアントとリソース所有者の両方に対して、リソースアクセスに対するセキュリティと制御を強化します。

## どのように使用すればよいですか?

API用に[configure RAR](/docs/ja-jp/get-started/apis/configure-rich-authorization-requests)（RARを構成）した後、`/par`エンドポイントに渡される要求に`authorization_details`パラメーターを追加できます。パラメーターはオブジェクトの配列です。各オブジェクトにはtypeフィールドが必要ですが、型は配列内で一意である必要はありません。認可コードフローを使用した例を次に示します。

```bash lines theme={null}
curl --location 'https://$tenant/oauth/par' \
  --request POST \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'client_id=$client_id' \
  --data-urlencode 'client_secret=$client_secret' \
  --data-urlencode 'redirect_uri=https://jwt.io' \
  --data-urlencode 'audience=urn:my-api' \
  --data-urlencode 'response_type=code' \
  --data-urlencode 'authorization_details=[{"type": "money_transfer", "instructedAmount": {"amount": 2500, "currency": "USD"},   "sourceAccount": "xxxxxxxxxxx1234", "destinationAccount": "xxxxxxxxxxx9876", "beneficiary": "Hanna Herwitz", "subject": "A Lannister Always Pays His Debts"}]'
```

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  フロントチャネル（ブラウザー）で機密データを保護し、受信した種類を早期に検証するために、Auth0では、`authorization_details`を直接`/authorize`エンドポイントに追加することはできません。`/par`エンドポイントに渡してから、認可コードフローを使って処理する必要があります。詳細については、「 [Pushed Authorization Requests（PAR）を使った認可コードフロー](/docs/ja-jp/get-started/authentication-and-authorization-flow/authorization-code-flow/authorization-code-flow-with-par) 」を参照してください。
</Callout>

各`authorization_details`要素は、`type`フィールドが含まれている限り、完全にカスタムにすることができます。

次のコードサンプルに示すように、`/oauth/token`エンドポイントで認可コードを交換すると、次のようになります。

```bash lines theme={null}
POST https://$tenant/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&client_id=[CLIENT_ID]&client_secret=[CLIENT_SECRET]&code=[AUTHZ_CODE]&redirect_uri=https://jwt.io
```

アクセストークンと`authorization_details`配列を含む応答を受け取ります。

```json lines theme={null}
{
  "access_token": "ey...ZQ",
  "expires_in": 86400,
  "authorization_details": [
{
  "type": "money_transfer", 
  "instructedAmount": {"amount": 2500, "currency": "USD"},   
  "sourceAccount": "xxxxxxxxxxx1234", 
  "destinationAccount": "xxxxxxxxxxx9876", 
  "beneficiary": "Hanna Herwitz", 
  "subject": "A Lannister Always Pays His Debts"
}
  ],
  "token_type": "Bearer"
}
```

`authorization_details`配列は、クライアントがアクセストークンを検査することなく、付与された認可のスコープを理解するのに役立ちます。一般に、クライアントはアクセストークンを検査してはなりません。これは、[IETF’s JSON Web Token Profile for OAuth 2.0 Access Tokens](https://datatracker.ietf.org/doc/html/rfc9068#name-privacy-considerations)（IETFの<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-1" href="/docs/ja-jp/glossary?term=oath2" tip="OAuth 2.0: 認可プロトコルとワークフローを定義する認可フレームワーク。" cta="用語集の表示">OAuth 2.0</Tooltip>アクセストークンのJSON Webトークンプロファイル）に詳細が記載されています。代わりに、リソースサーバーがアクセストークンを検査する必要があります。

要求されたオーディエンスが[［JWE access tokens（JWEアクセストークン）］](/docs/ja-jp/secure/tokens/json-web-tokens)を使用するように構成されたAPIである場合、`type`以外のすべてのフィールドは、`/oauth/token`エンドポイントからの応答の`authorization_details`要素から削除されます。アクセストークンの要求は影響を受けません。

```json lines theme={null}
{
  "iss": "https://my_tenant.auth0.com/",
  "sub": "auth0|me",
  "aud": "https://myapi.authzero.com",
  "iat": 1683661385,
  "exp": 1683747785,
  "azp": "my_client",
  "authorization_details": [
{
  "type": "money_transfer", 
  "instructedAmount": {"amount": 2500, "currency": "USD"},   
  "sourceAccount": "xxxxxxxxxxx1234", 
  "destinationAccount": "xxxxxxxxxxx9876", 
  "beneficiary": "Hanna Herwitz", 
  "subject": "A Lannister Always Pays His Debts"
}
  ]
}
```

### アクションでauthorization\_detailsにアクセスします

標準プロトコルのサポートに加えて、`event.transaction.requested_authorization_details`プロパティを使用して、ログイン後のアクション内のRARも公開します。このプロパティを使用して、多要素認証のステップアップなど、トランザクションに関する決定を行います。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Auth0では、現在、Actionsを使ったPARの更新は許可されていません。
</Callout>

## Auth0がサポートしていないものは何ですか?

現時点では、Auth0は次のことをサポートしていません:

* ActionsでのRARの更新。
* クライアントが検出できるようにRARタイプのアドバタイズ。

APIで許可されているタイプと一致する`type`（タイプ）プロパティがあるかどうかのチェックを超えて、RARオブジェクトを検証します。詳細については、[［Configure RAR（RARを構成）］](/docs/ja-jp/get-started/apis/configure-rich-authorization-requests)を参照してください。

## もっと詳しく

* [Rich Authorization Requests（RAR）を構成する](/docs/ja-jp/get-started/apis/configure-rich-authorization-requests)
