> ## 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.

> アイデンティティと認証に関連するトークンの種類と、Auth0 での使用方法について説明します。

# トークン

export const AuthCodeBlock = ({filename, icon, language, highlight, children}) => {
  const [displayText, setDisplayText] = useState(children);
  const [copyText, setCopyText] = useState(children);
  const wrapperRef = React.useRef(null);
  useEffect(() => {
    let unsubscribe = null;
    function init() {
      if (!window.autorun || !window.rootStore) {
        return;
      }
      unsubscribe = window.autorun(() => {
        let processedChildrenForDisplay = children;
        let processedChildrenForCopy = children;
        for (const [key, value] of window.rootStore.variableStore.values.entries()) {
          const escapedKey = key.replaceAll(/[.*+?^${}()|[\]\\]/g, (String.raw)`\$&`);
          let displayValue = value;
          if (key === "{yourClientSecret}" && value !== "{yourClientSecret}") {
            displayValue = value.substring(0, 3) + "*****マスク済み*****";
          }
          processedChildrenForDisplay = processedChildrenForDisplay.replaceAll(new RegExp(escapedKey, "g"), displayValue);
          processedChildrenForCopy = processedChildrenForCopy.replaceAll(new RegExp(escapedKey, "g"), value);
        }
        setDisplayText(processedChildrenForDisplay);
        setCopyText(processedChildrenForCopy);
      });
    }
    if (window.rootStore) {
      init();
    } else {
      window.addEventListener("adu:storeReady", init);
    }
    return () => {
      window.removeEventListener("adu:storeReady", init);
      unsubscribe?.();
    };
  }, [children]);
  useEffect(() => {
    if (!wrapperRef.current) return;
    const originalWriteText = navigator.clipboard.writeText.bind(navigator.clipboard);
    let isOverriding = false;
    const handleClick = e => {
      const button = e.target.closest('[data-testid="copy-code-button"]');
      if (!button || !wrapperRef.current.contains(button)) return;
      isOverriding = true;
      navigator.clipboard.writeText = text => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
          return originalWriteText(copyText);
        }
        return originalWriteText(text);
      };
      setTimeout(() => {
        if (isOverriding) {
          isOverriding = false;
          navigator.clipboard.writeText = originalWriteText;
        }
      }, 100);
    };
    const wrapper = wrapperRef.current;
    wrapper.addEventListener('click', handleClick, true);
    return () => {
      wrapper.removeEventListener('click', handleClick, true);
      if (navigator.clipboard.writeText !== originalWriteText) {
        navigator.clipboard.writeText = originalWriteText;
      }
    };
  }, [copyText]);
  return <div ref={wrapperRef}>
      <CodeBlock filename={filename} icon={icon} language={language} lines highlight={highlight}>
        {displayText}
      </CodeBlock>
    </div>;
};

アイデンティティに関連するトークンには、<Tooltip tip="IDトークン: リソースへのアクセスではなく、クライアント自体のための認証情報です。" cta="用語集を見る" href="/ja/docs/glossary?term=ID+tokens">IDトークン</Tooltip>と<Tooltip tip="IDトークン: リソースへのアクセスではなく、クライアント自体のための認証情報です。" cta="用語集を見る" href="/ja/docs/glossary?term=access+tokens">アクセストークン</Tooltip>の2種類があります。

<div id="id-tokens">
  ## IDトークン
</div>

[IDトークン](/ja/docs/secure/tokens/id-tokens) は、アプリケーションのみで使用することを目的とした [JSON Web Token (JWT) ](/ja/docs/secure/tokens/json-web-tokens) です。たとえば、Google を使ってユーザーをログインさせ、カレンダーを同期するアプリがある場合、Google はそのアプリに、ユーザーに関する情報を含む IDトークン を送信します。アプリはその後、[トークンの内容](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims) を解析し、その情報 (名前やプロフィール画像などを含む) を使用してユーザー体験をカスタマイズします。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  含まれている情報を使用する前に、必ず [IDトークンを検証](/ja/docs/secure/tokens/id-tokens/validate-id-tokens) してください。この作業には [ライブラリ](https://jwt.io/#libraries-io) を利用できます。
</Callout>

API へのアクセスに IDトークン を使用してはなりません。各トークンには、想定される <Tooltip tip="Audience: 発行されたトークンの対象者を表す一意の識別子。トークン内では aud という名前で表され、その値には IDトークン の場合はアプリケーション（クライアントID）の ID、アクセストークン の場合は API（API Identifier）の ID が含まれます。" cta="用語集を表示" href="/ja/docs/glossary?term=audience">オーディエンス</Tooltip> (通常は受信者) に関する情報が含まれています。<Tooltip tip="Audience: 発行されたトークンの対象者を表す一意の識別子。トークン内では aud という名前で表され、その値には IDトークン の場合はアプリケーション（クライアントID）の ID、アクセストークン の場合は API（API Identifier）の ID が含まれます。" cta="用語集を表示" href="/ja/docs/glossary?term=OpenID">OpenID</Tooltip> Connect の仕様では、IDトークン のオーディエンス (**aud** クレームで示されます) は、認証リクエストを行うアプリケーションの <Tooltip tip="Client ID: Auth0 から登録済みリソースに付与される識別値。" cta="用語集を表示" href="/ja/docs/glossary?term=client+ID">クライアントID</Tooltip> でなければなりません。そうでない場合、そのトークンは信頼すべきではありません。

デコードされた IDトークン の内容は、次のようになります。

export const codeExample1 = `{
  "iss": "http://{yourDomain}/",
  "sub": "auth0|123456",
  "aud": "{yourClientId}",
  "exp": 1311281970,
  "iat": 1311280970,
  "name": "Jane Doe",
  "given_name": "Jane",
  "family_name": "Doe",
  "gender": "female",
  "birthdate": "0000-10-31",
  "email": "janedoe@example.com",
  "picture": "http://example.com/janedoe/me.jpg"
}`;

<AuthCodeBlock children={codeExample1} language="json" />

このトークンは、アプリケーションに対してユーザーを認証するためのものです。トークンのオーディエンス (**aud** クレーム) はアプリケーションの識別子に設定されるため、このトークンを利用できるのはその特定のアプリケーションだけです。

一方、API は **aud** 値が API の一意の識別子と一致するトークンを想定しています。したがって、アプリケーションと API の両方を自分で管理していない限り、IDトークンを API に送信しても通常は機能しません。IDトークンは API によって署名されたものではないため、API が IDトークンを受け入れた場合、アプリケーションがトークンを改変していないかどうか (たとえば、スコープを追加していないかどうか) を API が確認する方法がありません。詳しくは、[JWT Handbook](https://auth0.com/resources/ebooks/jwt-handbook) を参照してください。

<div id="access-tokens">
  ## アクセストークン
</div>

[アクセストークン](/ja/docs/secure/tokens/access-tokens) (常に<Tooltip tip="JSON Web Token（JWT）: 2者間でクレームを安全に表現するために使用される標準的なIDトークン形式（また、多くの場合はアクセストークン形式）です。" cta="用語集を表示" href="/ja/docs/glossary?term=JWTs">JWT</Tooltip>であるとは限りません) は、トークンの提示者が API へのアクセスと、あらかじめ定められた一連のアクション (付与された**スコープ**で指定) を実行する権限を持つことを API に伝えるために使用されます。

上記の Google の例では、ユーザーがログインし、アプリが Google Calendar を読み書きすることに同意すると、Google はアプリにアクセストークンを送信します。アプリが Google Calendar に書き込む必要があるたびに、HTTP の **Authorization** ヘッダーにアクセストークンを含めて Google Calendar API にリクエストを送信します。

アクセストークンを[認証](/ja/docs/authenticate)に**絶対に**使用してはいけません。アクセストークンでは、ユーザーが認証されたかどうかは判断できません。アクセストークンに含まれる唯一のユーザー情報は、**sub** クレームにあるユーザーIDです。アクセストークンは API 向けのものであるため、アプリケーションでは不透明な文字列として扱ってください。アプリケーションでデコードを試みたり、特定の形式のトークンが返されることを前提にしたりしないでください。

以下はアクセストークンの例です。

export const codeExample2 = `{
  "iss": "https://{yourDomain}/",
  "sub": "auth0|123456",
  "aud": [
    "my-api-identifier",
    "https://{yourDomain}/userinfo"
  ],
  "azp": "{yourClientId}",
  "exp": 1489179954,
  "iat": 1489143954,
  "scope": "openid profile email address phone read:appointments"
}`;

<AuthCodeBlock children={codeExample2} language="json" />

このトークンには、ユーザーの ID (**sub** クレーム) 以外のユーザー情報は含まれていないことに注意してください。含まれているのは、アプリケーションが API に対して実行できる操作に関する認可情報 (**scope** クレーム) のみです。これは API の保護には役立ちますが、ユーザーの認証には使えません。

状況によっては、API がユーザーの詳細情報を取得するための追加処理を行わずに済むよう、sub クレームに加えて、ユーザーに関する追加情報やその他のカスタムクレームをアクセストークンに含めたい場合があります。その場合は、これらの追加クレームの内容をアクセストークン内で読み取れることに注意してください。詳しくは、[カスタムクレームを作成する](/ja/docs/secure/tokens/json-web-tokens/create-custom-claims) を参照してください。

<div id="specialized-tokens">
  ## 専用トークン
</div>

Auth0 のトークンベース認証では、3 種類の専用トークンが使用されます。

* **<Tooltip tip="リフレッシュトークン: ユーザーに再度ログインを求めることなく、新しいアクセストークンを取得するために使用するトークン。" cta="用語集を見る" href="/ja/docs/glossary?term=Refresh+tokens">リフレッシュトークン</Tooltip>**: ユーザーを再認証することなく、新しいアクセストークンを取得するためのトークンです。
* **<Tooltip tip="IDプロバイダー（IdP）: デジタル ID を保存および管理するサービス。" cta="用語集を見る" href="/ja/docs/glossary?term=IDP">IDP</Tooltip> アクセストークン**: ユーザーの認証後に ID プロバイダーが発行するアクセストークンで、サードパーティ API の呼び出しに使用できます。
* **Auth0 <Tooltip tip="Management API: お客様が管理タスクを実行するための製品。" cta="用語集を見る" href="/ja/docs/glossary?term=Management+API">Management API</Tooltip> アクセストークン**: 特定のクレーム (スコープ) を含む有効期間の短いトークンで、Management API エンドポイントを呼び出すことができます。

<div id="learn-more">
  ## 詳しくはこちら
</div>

* [JSON Web Tokens](/ja/docs/secure/tokens/json-web-tokens)
* [IDトークン](/ja/docs/secure/tokens/id-tokens)
* [アクセストークン](/ja/docs/secure/tokens/access-tokens)
* [リフレッシュトークン](/ja/docs/secure/tokens/refresh-tokens)
* [トークンの保存](/ja/docs/secure/security-guidance/data-security/token-storage)
* [トークンのベストプラクティス](/ja/docs/secure/tokens/token-best-practices)
