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

# カスタムトークン交換

> カスタム Action とトークン交換プロファイルを使用して、既存のセキュリティトークンを Auth0 のアクセストークン、ID トークン、リフレッシュトークンに交換します。

export const ReleaseStageNotice = ({feature, stage, plans, contact, terms}) => {
  const stageTextMap = {
    "beta": "Beta",
    "ea": "早期アクセス"
  };
  const stageText = stageTextMap[stage] || "製品リリース段階";
  const prsLink = "/docs/troubleshoot/product-lifecycle/product-release-stages";
  const linkify = (text, url) => {
    return <a href={url} target="_blank" rel="noreferrer" class="link">{text}</a>;
  };
  const includeDetails = (plans, contact, terms) => {
    const hasDetails = terms || plans || contact;
    if (!hasDetails) return null;
    return <span data-as="p">
            {plans && <>この機能は{linkify(`${plans}プラン`, "https://auth0.com/pricing")}でご利用いただけます。 </>}
            {contact && "参加をご希望の場合は、" + contact + "までお問い合わせください。 "}
            {terms && <>この機能を使用することにより、Oktaの該当する無料トライアル規約および{linkify("Master Subscription Agreement", "https://www.okta.com/legal")}に同意したものとみなされます。</>}
        </span>;
  };
  return <Warning>
            <span data-as="p">
                <strong>{feature}機能は現在、{linkify(stageText, prsLink)}です。</strong>
            </span>

            {includeDetails(plans, contact, terms)}
        </Warning>;
};

<ReleaseStageNotice feature="Custom Token Exchange (CTE)" stage="ea" plans="B2C Professional, B2B Professional, and Enterprise" terms="true" />

カスタムトークン交換を使用すると、[RFC 8693](https://datatracker.ietf.org/doc/html/rfc8693) で定義されているとおり、アプリケーションは `/oauth/token` エンドポイントの呼び出し時に、既存のトークンを Auth0 トークンに交換できます。カスタムトークン交換の一般的なユースケースには、次のようなものがあります。

* 別の <Tooltip tip="Audience: 発行されたトークンの audience の一意な識別子です。トークン内では aud という名前で表され、その値には ID トークンの場合はアプリケーション（Client ID）の ID、アクセストークンの場合は API（API Identifier）の ID が含まれます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=audience">audience</Tooltip> 向けの Auth0 トークンを取得する
* 外部の <Tooltip tip="Identity Provider (IdP): デジタルアイデンティティを保存および管理するサービスです。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=identity+provider">アイデンティティプロバイダー</Tooltip> と連携する
* Auth0 に移行する
* 委任された認可: プリンシパル (サービス、AI エージェント、サポート担当者など) がユーザーに代わって動作する

詳しくは、[使用例とコードサンプル](/docs/ja-jp/authenticate/custom-token-exchange/cte-example-use-cases) をご覧ください。

<Tip>
  カスタムトークンのバリデーション要件がなく、自社サービス間で委譲コンテキストを伝達するだけでよい場合は、代わりに [On-Behalf-Of Token Exchange](/docs/ja-jp/secure/call-apis-on-users-behalf/on-behalf-of-token-exchange) を使用してください。これはリクエストごとにカスタム Action を実行せず、大幅に高いスループットをサポートします。カスタム形式のサブジェクトトークンまたはアクタートークンをバリデーションする必要がある場合、外部のアイデンティティプロバイダーと連携する場合、または交換ロジックを完全に制御する必要がある場合は、カスタムトークン交換を使用してください。
</Tip>

各カスタムトークン交換リクエストは、[Action](/docs/ja-jp/customize/actions) によって制御される [Custom Token Exchange Profile](/docs/ja-jp/authenticate/custom-token-exchange/configure-custom-token-exchange#create-custom-token-exchange-profile) にマッピングされます。ここでは、次のことができます。

* `/oauth/token` エンドポイントに渡される `subject_tokens` をデコードしてバリデーションするカスタムコードを記述する
* アクセスを認可し、トランザクションを続行するユーザーを設定する。

1 つのアプリケーションに対して、[複数の Custom Token Exchange Profile を設定](/docs/ja-jp/authenticate/custom-token-exchange/configure-custom-token-exchange#create-custom-token-exchange-profile) できます。Auth0 Authorization Server がカスタムトークン交換リクエストの有効性を検証し、既存の Custom Token Exchange Profile にマッピングすると、[Custom Token Exchange トリガー](/docs/ja-jp/customize/actions/explore-triggers/signup-and-login-triggers/custom-token-exchange-trigger) によって、そのプロファイルに関連付けられた 1 つの Action が実行されます。その後、アプリケーションはカスタムトークン交換を利用して、ユーザーを認証し、そのユーザーの Auth0 のアクセストークン、ID トークン、リフレッシュトークンを取得できます。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  カスタムトークン交換では、トランザクション上のユーザーを識別する対応するサブジェクトトークンを安全にバリデーションするという追加の責任を負う代わりに、トランザクションのユーザーを設定できる柔軟性が得られます。

  カスタムトークン交換で使用するサブジェクトトークンとアクタートークンは、Action コードで解釈できる限り、必要に応じて任意のトークン形式またはタイプにできます。**受け取って受け入れるトークンには、必ず強固なバリデーションを実装してください。** これを怠ると、なりすましやリプレイ攻撃など、さまざまな攻撃ベクトルにさらされ、悪意のある第三者が他人の user ID で認証したり、許可なくその人の代理として行動したりできるようになります。

  サブジェクトトークンの安全なバリデーションを実装するためのさまざまな方法については、[使用例とコードサンプル](/docs/ja-jp/authenticate/custom-token-exchange/cte-example-use-cases) に記載されている推奨事項を確認し、適用してください。また、[攻撃対策](/docs/ja-jp/authenticate/custom-token-exchange/cte-attack-protection) 機能についても考慮し、適用してください。
</Callout>

<div id="tenant-logs">
  ## テナントログ
</div>

各カスタムトークン交換トランザクションで、テナントのイベントログが生成されます。

* 成功したトランザクション: `secte` ログ
* 失敗したトランザクション: `fecte` ログ

`setActor()` を使用して actor を設定すると、監査のため、`sub` とネストされた `actor` を含む `actor` プロパティが `secte` のログエントリに含まれます。

テナントログは、トークン交換で発生した問題のトラブルシューティングに役立ちます。

<div id="limitations">
  ## 制限事項
</div>

カスタムトークン交換では、次の項目はサポートされていません。

* MFA API メソッド `api.authentication.challengeWith()` および `api.authentication.EnrollWith()`
* インポートモードが `ON` のカスタム DB 接続は、`setUserByConnection()` 操作ではサポートされていません
* サードパーティ クライアントおよび OIDC 非準拠クライアント
* 非対話型フローでは同意を取得できないため、対象の API では **ユーザー同意のスキップを許可** を有効にする必要があります。
