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

# カスタムクレームを作成する

> カスタムクレームに衝突耐性のある名前を付ける方法を学びます。

アクセストークンやIDトークンのカスタムクレームを読み出すには、<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-2" href="/docs/ja-jp/glossary?term=json-web-token" tip="JSON Web Token（JWT）: 二者間のクレームを安全に表現するために使用される標準IDトークン形式（および多くの場合、アクセストークン形式）。" cta="用語集の表示">JSON Web Token</Tooltip>（JWT）を使用して、OIDCのログインフローでオーディエンス（`aud`）を渡す必要があります。詳細については、「[アクセストークン](/docs/ja-jp/secure/tokens/access-tokens)」をお読みください。

JWTでカスタムクレームを設定するときは、衝突を回避する必要があります。カスタムクレームが予約されたクレームや他のリソースのクレームと衝突しないようにするには、カスタムクレームに衝突耐性のある名前を付けます。Auth0では、名前空間形式の使用を推奨しています。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Auth0では、名前空間を指定したクレームと名前空間を指定しないクレームが使用できますが、特定の制限があります（「[一般的な制限](https://auth0.com/docs/secure/tokens/json-web-tokens/create-custom-claims#general-restrictions)」を参照してください）。名前の衝突を避けるために、名前空間を指定したクレームの使用をお勧めします。衝突が生じた場合、トランザクションは失敗しませんが、カスタムクレームがトークンに追加されません。
</Callout>

## 一般的な制限

Auth0は、カスタムクレームに以下の制限を適用します。

* カスタムクレームのペイロードは最大100 KBに設定される
* [OpenID標準クレーム](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)や、Auth0によって内部的に使用されるクレームは、カスタマイズや変更できない
* `/userinfo`エンドポイントを除いて、Auth0 APIオーディエンスのアクセストークンには、名前空間のない、プライベートなカスタムクレームが含まれてはいけない
* 指定されたOIDCユーザープロファイルクレームしかアクセストークンに追加できない

次のクレームがAuth0の制限の対象となります。

* `acr`
* `act`
* `active`
* `amr`
* `at_hash`
* `ath`
* `attest`
* `aud`
* `auth_time`
* `authorization_details`
* `azp`
* `c_hash`
* `client_id`
* `cnf`
* `cty`
* `dest`
* `entitlements`
* `events`
* `exp`
* `groups`
* `gty`
* `htm`
* `htu`
* `iat`
* `internalService`
* `iss`
* `jcard`
* `jku`
* `jti`
* `jwe`
* `jwk`
* `kid`
* `may_act`
* `mky`
* `nbf`
* `nonce`
* `object_id`
* `org_id`
* `org_name`
* `orig`
* `origid`
* `permissions`
* `roles`
* `rph`
* `s_hash`
* `sid`
* `sip_callid`
* `sip_cseq_num`
* `sip_date`
* `sip_from_tag`
* `sip_via_branch`
* `sub`
* `sub_jwk`
* `toe`
* `txn`
* `typ`
* `uuid`
* `vot`
* `vtm`
* `x5t#S256`

### 制限のないクレーム

機密のユーザー情報のクレームを作成して、ユーザープロファイルを強化し、ユーザーエクスペリエンスを向上させることができます。これらのクレームは、IDトークンからアプリケーションによって利用されます。制限のないクレームの詳細については、「[IDトークン](/docs/ja-jp/secure/tokens/id-tokens)」をお読みください。使用の際には、「[トークンのベストプラクティス](/docs/ja-jp/secure/tokens/token-best-practices)」を考慮してください。

以下のクレームには一般的な制限のみが適用されます。

* `address`
* `birthdate`
* `email`
* `email_verified`
* `family_name`
* `gender`
* `given_name`
* `locale`
* `middle_name`
* `name`
* `nickname`
* `phone_number`
* `phone_number_verified`
* `picture`
* `preferred_username`
* `profile`
* `updated_at`
* `website`
* `zoneinfo`

## 名前空間のガイドライン

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  Auth0 URN`urn:auth0`は名前空間識別子として使用できません。
</Callout>

名前空間識別子については、以下のガイドラインを使用してください。

* Auth0以外のHTTPまたはHTTPS URLを名前空間識別子として使用します。Auth0のドメインは名前空間識別子として使用できません。これには以下のものが含まれます。

  * auth0.com
  * webtask.io
  * webtask.run
* 自分が管理しているURLを名前空間識別子として使用します。これにより、他の誰かが同じ名前空間を使用するリスクを回避できます。この名前空間URLが実際のリソースを指す必要はありません。これは呼び出されることがなく、識別子としてのみ使用されます。
* URLは`http://`または`https://`で始めます。
* 必要に応じて、複数の名前空間を作成します。
* 必要に応じて、複数の名前空間を作成します。

名前空間を選択したら、それにクレームを追加して、トークンに追加できる名前空間クレームを作成します。例：

`http://www.example.com/favorite_color`

## 非名前空間のガイドライン

非名前空間のカスタムクレームについては、次のガイドラインを使用してください。

* アプリケーションに絶対に必要な場合を除き、衝突耐性のあるパブリックの名前空間カスタムクレームを使用してください。
* 衝突耐性のある、分かりやすい名前のクレームを作成します。たとえば、`employee_id`を使用します。`e_id`にはしません。
* クレームの名前と値をできるだけ軽くし、アプリケーションに絶対に必要なデータのみを渡すようにします。
* 重いペイロードをカスタムクレームに割り当てないようにします。

トークンに追加されるカスタムクレームの他の例については、「[ユースケースの例：スコープとクレーム](/docs/ja-jp/get-started/apis/scopes/sample-use-cases-scopes-and-claims)」を参照してください。

## カスタムクレームを作成する

カスタムクレームを作成するには、Auth0 Actionsを使用します。`api`オブジェクトを使用すると、アクセストークンやIDトークンに`setCustomClaim`メソッドが使えるようになります。

### 例

```lines theme={null}
exports.onExecuteCredentialsExchange = async (event, api) => {
  api.accessToken.setCustomClaim('myClaim', 'this is a private, non namespaced claim');
};
```

## もっと詳しく

* [JSON Web Tokenクレーム](/docs/ja-jp/secure/tokens/json-web-tokens/json-web-token-claims)
* [OpenID Connectのスコープ](/docs/ja-jp/get-started/apis/scopes/openid-connect-scopes)
