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

# OIDCバックチャネルログアウトイニシエータ

> OIDCバックチャネルログアウトイニシエータの機能と、使用しているアプリケーションについて設定する方法を説明します。

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>;
};

OIDCバックチャネルログアウトイニシエータを使用すると、セッション終了イベントに基づいて、ユーザーをリモートでアプリケーションからログアウトさせることができます。OIDCバックチャネルログアウトイニシエータは、IDプロバイダー（<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-2" href="/docs/ja-jp/glossary?term=idp" tip="IDプロバイダー（IdP）: デジタルIDを保存および管理するサービス。" cta="用語集の表示">IdP</Tooltip>）起点の<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-1" href="/docs/ja-jp/glossary?term=security-assertion-markup-language" tip="Security Assertion Markup Language（SAML）: パスワードなしに二者間で認証情報を交換できる標準化プロトコル。" cta="用語集の表示">SAML</Tooltip>ログアウト要求など、プロトコルを超えて動作し、サードパーティーのクッキー制限には影響されません。

この機能はOIDCバックチャネルの標準仕様を拡張したものです。この機能を構成すると、パスワードの変更やセッションの期限切れなどの特定のセッション終了イベント、またはすべてのセッション終了イベントに対して、OIDCバックチャネルログアウト要求を開始できるようになります。

管理者はAuth0 <Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=management-api" tip="Management API: 顧客が管理タスクを実行できるようにするための製品。" cta="用語集の表示">Management API</Tooltip>を使って、特定のアプリケーションに対してこの機能を有効にすることができます。

## OIDCバックチャネルログアウトイニシエータの仕組み

イニシエータは、OIDCバックチャネルログアウト応答をセッション終了イベントにバインドします。イベントをキャプチャして、対象のセッションに関連付けられているすべてのアプリケーションでOIDCログアウトトークンをトリガーするのに使用します。

<Callout icon="file-lines" color="#0EA5E9" iconType="regular">
  イニシエータは、テナントにおけるセッション管理（セッション終了イベントを含む）を制御しません。
</Callout>

下の図は、パスワード変更イベントについて、OIDCバックチャネルログアウトイニシエータの動作をまとめたものです。

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/auth0/docs/images/ja-jp/cdy7uua7fh8z/2GwtCTwecxYONxL1DbewxO/a096a417507a96be8b13acf0970567a3/OIDC_Back-Channel_Logout_Initiators_Diagram.png" alt="" />
</Frame>

## OIDCバックチャネルログアウトイニシエータを構成する

OIDCバックチャネルログアウトイニシエータはAuth0 Management APIを使って構成することができます。

### Management API

Auth0 Management APIでOIDCバックチャネルログアウトイニシエータを構成するには、[クライアント更新](https://auth0.com/docs/api/management/v2/clients/patch-clients-by-id)エンドポイントを使用します。

1. `update:clients`スコープを持つ[Management APIアクセストークン](https://auth0.com/docs/secure/tokens/access-tokens/management-api-access-tokens)を取得します。
2. ペイロードに適切な構成データを含めて、[クライアント更新](https://auth0.com/docs/api/management/v2/clients/patch-clients-by-id)エンドポイントを呼び出します。たとえば、パスワード変更イベントの後でアプリケーションからログアウトさせるには、以下を提供します。

export const codeExample1 = `   PATCH /api/v2/clients/{yourClientId}
{
  ...
  "oidc_logout": {
    "backchannel_logout_urls": ["https://example.com/cb"]
    "backchannel_logout_initiators": {
      "mode":"custom",
      "selected_initiators": ["rp-logout", "idp-logout", "password-changed"]
    }
  }
  ...
}
`;

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

#### プロパティ

`backchannel_logout_initiators`オブジェクトは以下のプロパティをサポートしています。

| プロパティ                 | タイプ | 必須?                   | 説明                    | サポートされている値                                                                                                                   |
| --------------------- | --- | --------------------- | --------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `mode`                | 文字列 | 必須                    | イニシエーターを有効にするための構成方法。 | `custom`、`all`                                                                                                               |
| `selected_initiators` | 配列  | `mode`が`custom`の場合は必須 | 有効にするイニシエーターのリスト。     | `rp-logout`、`idp-logout`、`password-changed`、`session-expired`、`session-revoked`、`account-deleted`、`email-identifier-changed` |

##### modeプロパティ

`mode`プロパティはイニシエータを有効化するための構成メソッドを定義します。

デフォルトでは`custom`に設定され、有効化したいイニシエータを指定できるようになっています。IdPセッションの終了後に必ずアプリケーションをログアウトさせたい場合には、`all`に設定します。

`mode`プロパティは以下の値をサポートしています。

| 値        | 説明                                              |
| -------- | ----------------------------------------------- |
| `custom` | `selected_initiators`配列にリストされたイニシエーターのみを有効にします。 |
| `all`    | 現在および将来のすべてのイニシエーターを自動的に有効にします。                 |

##### selected\_initiatorsプロパティ

`selected_initiators`プロパティには、指定されたアプリケーションに対して有効化するイニシエータのリストが含まれます。

`selected_initiators`プロパティは以下の値をサポートしています。

| 値                          | 説明                             |
| -------------------------- | ------------------------------ |
| `rp-logout`                | 要求がリライングパーティー（RP）によって開始されました。  |
| `idp-logout`               | 要求が外部IDプロバイダー（IdP）によって開始されました。 |
| `password-changed`         | 要求がパスワードの変更によって開始されました。        |
| `session-expired`          | 要求がセッションの期限切れによって開始されました。      |
| `session-revoked`          | 要求がセッションの削除によって開始されました。        |
| `account-deleted`          | 要求がアカウントの削除によって開始されました。        |
| `email-identifier-changed` | 要求がメール識別子の変更によって開始されました。       |

#### 例

##### アプリケーションを現在と未来のイニシエータすべてに登録する

export const codeExample2 = `PATCH /api/v2/clients/{yourClientId}

{
  ...
  "oidc_logout": {
    "backchannel_logout_urls": ["https://example.com/cb"]
    "backchannel_logout_initiators": {
      "mode":"all"
    }
  }
  ...
}`;

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

##### アプリケーションをパスワード変更のイニシエータにのみ登録する（rp-logoutとidp-logoutが必要）

export const codeExample3 = `PATCH /api/v2/clients/{yourClientId}

{
  ...
  "oidc_logout": {
    "backchannel_logout_urls": ["https://example.com/cb"]
    "backchannel_logout_initiators": {
      "mode":"custom",
      "selected_initiators": ["rp-logout", "idp-logout", "password-changed"]
    }
  }
  ...
}`;

<AuthCodeBlock children={codeExample3} language="json" filename="JSON" />

##### すべてのイニシエータを登録解除する（rp-logoutはデフォルトで登録されたままになる）

export const codeExample4 = `PATCH /api/v2/clients/{yourClientId}

{
  ...
  "oidc_logout": {
	  "backchannel_logout_urls": ["https://example.com/cb"]
  }
  ...
}`;

<AuthCodeBlock children={codeExample4} language="json" filename="JSON" />

### ダッシュボード

<Tooltip data-tooltip-id="react-containers-DefinitionTooltip-0" href="/docs/ja-jp/glossary?term=openid" tip="OpenID: アプリケーションがログイン情報を収集および保存することなくにユーザーのIDを検証できるようにする認証用のオープン標準。" cta="用語集の表示">OpenID</Tooltip> Connectバックチャネルログアウトは他のアプリケーション設定と並行して構成できます。この機能は、バックチャネルログアウトURIが提供されると、自動的にアクティブ化されます。

<Frame>
  <img src="https://mintlify.s3.us-west-1.amazonaws.com/auth0/docs/images/ja-jp/cdy7uua7fh8z/vgN0wudP38zgRZNL59Mhy/305351ceb61852621759023a3269e9cf/Backchannel_Logout_settings.png" alt="Dashboard > Applications > Application Settings" />
</Frame>

#### Selected initiators only（選択されたイニシエータのみ）

必要なイニシエータ（`rp-logout`と`idp-logout`）のみがデフォルトで登録されます。他の追加のイニシエータは、未来に追加されるものも含めて、前もって選択しておかないと、アプリケーションからログアウトを開始できません。

選択したイニシエータについてのみアプリケーションをログアウトさせたい場合には、このオプションを選択します。

#### All supported initiators（すべてのサポートされているイニシエータ）

すべてのサポートされているイニシエータが、未来に追加されるものも含めて、デフォルトで登録されます。

IdPセッションの終了時に必ずアプリケーションをログアウトさせたい場合には、このオプションを選択します。
