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

> ID と認証に関連するトークンの種類と、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) + "*****MASKED*****";
          }
          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="/docs/ja-jp/glossary?term=ID+tokens">ID トークン</Tooltip>と<Tooltip tip="ID トークン: リソースへのアクセス用ではなく、クライアント自体を対象とした資格情報。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=access+tokens">アクセストークン</Tooltip>の 2 種類があります。

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

[ID トークン](/docs/ja-jp/secure/tokens/id-tokens)は、アプリケーションのみで使用するための[JSON Web トークン (JWT) ](/docs/ja-jp/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 トークンを検証](/docs/ja-jp/secure/tokens/id-tokens/validate-id-tokens)してください。この作業には[ライブラリ](https://jwt.io/#libraries-io)を利用できます。
</Callout>

API へのアクセスを得るために ID トークンを使用してはいけません。各トークンには、想定された<Tooltip tip="Audience: 発行されたトークンの audience の一意の識別子。トークン内では aud という名前で、その値には ID Token の場合はアプリケーション（Client ID）の ID、Access Token の場合は API（API 識別子）の ID が含まれます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=audience">audience</Tooltip> (通常は受信者) に関する情報が含まれています。<Tooltip tip="Audience: 発行されたトークンの audience の一意の識別子。トークン内では aud という名前で、その値には ID Token の場合はアプリケーション（Client ID）の ID、Access Token の場合は API（API 識別子）の ID が含まれます。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=OpenID">OpenID</Tooltip> Connect 仕様によると、ID トークンの audience (**aud** クレームで示されます) は、認証リクエストを行うアプリケーションの<Tooltip tip="Client ID: 登録済みリソースに Auth0 から付与される識別値。" cta="用語集を見る" href="/docs/ja-jp/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" />

このトークンは、ユーザーをアプリケーションに対して認証するためのものです。トークンの audience (**aud** クレーム) にはアプリケーションの identifier が設定されるため、このトークンを利用できるのはその特定のアプリケーションに限られます。

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

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

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

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

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

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

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** クレームに加えて、ユーザーに関する追加情報やその他のカスタムクレームをアクセストークンに含めたい場合もあります。そうする場合は、これらの追加のクレームはアクセストークン内で読み取れることに留意してください。詳しくは、[Create Custom Claims](/docs/ja-jp/secure/tokens/json-web-tokens/create-custom-claims) を参照してください。

<div id="specialized-tokens">
  ## 特殊なトークン
</div>

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

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

<div id="learn-more">
  ## 詳細
</div>

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