メインコンテンツへスキップ

開始前に

バックチャネルログアウトを使用するには、アプリケーションが次の要件を満たしている必要があります。
  • OIDC バックチャネルログアウト URI エンドポイントは、Auth0 テナントからアクセスできるよう、インターネット経由で公開されている必要があります。
  • 本番運用向けのアプリケーションでは、TLS を使用する必要があります。詳細については、TLS (SSL) Versions and Ciphers を参照してください。
  • アプリケーションは、提供されたセッション識別子 (sid) を保存し、作成したユーザーセッションに関連付けられる必要があります。本番環境のアプリケーションでは、永続的なセッションストレージを使用することを推奨します。
  • アプリケーションは、ログアウト処理中にクライアント側の Cookie を使用せず、sid を使って既存のセッションを取得できる必要があります。Cookie はブラウザー内に存在するため、ログアウトコールバックエンドポイントからはアクセスできません。

提供状況

OIDC Back-Channel Logout は、Enterprise プランのすべてのお客様が利用できます。アプリケーションが要件を満たしているかどうかを判断するには、OIDC 標準の /.well-known/* メタデータエンドポイントを確認してください。
GET https://acme.eu.auth0.com/.well-known/openid-configuration

HTTP 200
{ ..., "backchannel_logout_supported": true, 
  "backchannel_logout_session_supported": true }

バックチャネルログアウトの制限

バックチャネルログアウト URL は外部に公開されたエンドポイントで呼び出されるため、いくつかの制限に従う必要があります。
  1. HTTPS プロトコルを使用する必要があります。暗号化されていない HTTP やその他のプロトコルは使用できません。
  2. Auth0 のサブドメインは使用できません。Auth0 のサブドメインには、次のようなものがあります。
    • auth0.com
    • auth0app.com
    • webtask.io
    • webtask.run
  3. ドメイン名を持たない IP アドレスの使用は推奨されません。バックチャネルログアウトで IP アドレスを使用する場合は、パブリック IP である必要があります。内部、予約済み、またはループバックの範囲に属する IP アドレスは使用できません。

Auth0 を設定する

または を使用して、Logout Tokens を受信できるようアプリケーションを登録します。

アプリケーションを登録する

  1. Auth0 Dashboard > Applications に移動します。
  2. 登録するアプリケーションを選択します。
  3. Settings タブを選択します。
  4. OpenID Connect Back-Channel Logout > Back-Channel Logout URI で、logout_tokens を受信するアプリケーションのログアウト URI を追加します。
  5. 完了したら、Save Changes を選択します。
    Auth0 Dashboard > Applications > Settings

アプリケーションの登録を解除する

アプリケーションの登録を解除すると、サービスは新しいログインの追跡とログアウトイベントの送信を停止します。登録解除後、サービスは保留中のログアウトイベントを破棄します。アプリケーションの登録を解除するには、back-channel logout URL を削除します。
  1. Auth0 Dashboard > Applications に移動します。
  2. 登録を解除するアプリケーションを選択します。
  3. Settings タブを選択します。
  4. OpenID Connect Back-Channel Logout > Back-Channel Logout URI の項目で、
  5. back-channel URL を削除します。
  6. 完了したら、Save Changes を選択します。
    Auth0 Dashboard > Applications > Settings
監査目的で、サービスは back-channel logout URL の登録または登録解除を、常に Auth0 テナントログに API Operation Event として記録します。詳しくは、Logs を参照してください。

アプリケーションを設定する

Auth0 Dashboard または Management API で Back-Channel Logout を設定したら、使用している技術またはフレームワークに応じて、このサービスを利用できるようアプリケーションを設定します。
  1. アプリケーションの種類に応じて、エンドユーザー認証を実装します。
    1. エンドユーザーがアプリケーションにログインでき、セッションが作成される必要があります。
    2. Auth0 から IDトークン が発行され、その後の処理のためにアプリケーションのバックエンドからアクセスできる必要があります。
  2. IDトークン の検証後に、sid と、必要に応じて sub クレームを保存するよう、ログインプロセスを拡張します。
    1. これらのクレームは、現在のアプリケーションセッションに関連付けて保存する必要があります。
    2. セッション管理機能は、sid の値を使って特定のセッションを取得できる必要があります。
  3. Back-Channel Logout エンドポイントを設定します。
    1. エンドポイントは HTTP POST リクエストのみを処理する必要があります。
    2. logout_token パラメーターを抽出し、仕様に従って通常の JWT として検証します。
    3. トークンに、JSON オブジェクト値を持つ events クレームと、http://schemas.openid.net/event/backchannel-logout という名前のメンバーが含まれていることを確認します。
    4. トークンに sid および/または sub クレームが含まれていることを確認します。
    5. トークンに nonce クレームが含まれていないことを確認します。これは、Logout Token を IDトークン と区別して悪用を防ぐために必要です。
    6. トークンが検証されたら、受信した sid および/または sub の値に対応するセッションを取得し、終了します。アプリケーションセッションを終了する具体的な手順は、実装の詳細によって異なります。たとえば、このイベントをフロントエンドに通知する必要がある場合があります。

OIDC バックチャネルログアウトリクエストの例

エンコードされたトークンペイロード:
cURL
POST /backchannel-logout HTTP/1.1
Host: rp.example.org
Content-Type: application/x-www-form-urlencoded

logout_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImdwY3ZFT0FPREE2T3pXRmw3ODVxbCJ9.eyJpc3MiOiJodHRwczovL2FydGV4LWRldi5ldS5hdXRoMC5jb20vIiwic3ViIjoiYXV0aDB8NjAyZTkzZGI4M2ZhNmYwMDc0OWEyM2U2IiwiYXVkIjoiVHVoTkx2N3VsWEQzUmZ5TGxTTWJPdnN6endKSkZQcE8iLCJpYXQiOjE2OTgxNjA5MjgsImV4cCI6MTY5ODE2MTA0OCwianRpIjoiNDRhOTEyMTUtZGZiNC00ZGZlLWExZWItZmNhZmE5MTFkZWJhIiwiZXZlbnRzIjp7Imh0dHA6Ly9zY2hlbWFzLm9wZW5pZC5uZXQvZXZlbnQvYmFja2NoYW5uZWwtbG9nb3V0Ijp7fX0sInRyYWNlX2lkIjoiODFiMzM2YTk0YTRhNTcwNyIsInNpZCI6IjM3NVVJcF9JRDVtQ1RDbEllQkVIcFhmR3dxNTF0Rl9MIn0.aEoAL_U-EPlf3f7Fup-bu7Yv0S0GOnrkL8Njd6j6UNqZcr5VrWWFf3CWvkRi7Cm6wMgU2qIMhb7643ca8-ajR7zHlMu0Z3r-gfd2D1xudKLyUSC3v2D5WJZz5I8xMZ_LWtIN2W3l4SQFO9MgK_7F3x0WIWXo9KPC9tgOaOLPnsiv__MutM1ZakoCsJPddl5gVM4TYtHOue6WM7SOXZNa3SSiv57YQOX2KNCL7sWmZp_J1OXKy8lsgkNFqiOVwu39p4sgjKYEXQU0G-I0yY_aeNbnlnxFG6OuxaDt_zwg6AvKglLSNGqrrvzy4GsYJi5HMGZ1GsSs7rQLg7Iuu6JM-A
トークンの有効期限は2分 (120秒) です。
デコード後のトークンペイロード:
JSON
{
   "iss": "https://artex-dev.eu.auth0.com/",
   "sub": "auth0|602e93db83fa6f00749a23e6",
   "aud": "TuhNLv7ulXD3RfyLlSMbOvszzwJJFPpO",
   "iat": 1698160928,
   "exp": 1698161048,
   "jti": "44a91215-dfb4-4dfe-a1eb-fcafa911deba",
   "events": {
         "http://schemas.openid.net/event/backchannel-logout": {}
   },
   "trace_id": "81b336a94a4a5707",
   "sid": "375UIp_ID5mCTClIeBEHpXfGwq51tF_L"
}

想定されるレスポンス

  • HTTP 200:  ユーザーが特定のアプリケーションからログアウトしたことを示します。
  • HTTP 400: 不正なリクエストを示します。リクエストを解釈できないか、トークンの検証に失敗しています。Auth0 はこの問題をテナントのログに記録しますが、この特定のセッションに対してそれ以上のリクエストは行いません。

問題のトラブルシューティング

アプリケーションがログアウトイベントを受信しない

ログアウトイベントの発生後に、アプリケーションがログアウトリクエストを受信しない場合は、次の点を確認してください。
  1. アプリケーションの Back-Channel Logout URL が Auth0 Dashboard に登録されていることを確認します。
  2. Back-Channel Logout URL に Auth0 テナントから到達できることを確認します。
  3. 有効なセッションが確立されていることを確認します。エンドユーザーは、Auth0 経由でその特定のアプリケーションにログインしている必要があります。
    アプリケーションがログアウトイベントを受信するのは、エンドユーザーが Auth0 を使用してその特定のアプリケーションにログインした場合のみです。エンドユーザーが他のアプリケーションにログインしている場合、ログアウトイベントはトリガーされません。
  4. ログアウトメッセージの配信に失敗したことを示すメッセージがないか、Auth0 テナントのログを確認します。
  5. 標準のログアウトエンドポイント経由でログアウトがトリガーされていることを確認します。他のイベントではログアウトイベントはトリガーされません。
  6. 可能であれば、Web サーバーやアプリケーションファイアウォールのログで、リクエストがブロックされていないか確認します。

OIDC Back-Channel Logout のテナントログが見つからない

この機能は、2023 年 10 月 3 日からすべてのテナントに段階的にリリースされます。テナントログイベントコードとして、oidc_backchannel_logout_succeeded には引き続き sslooidc_backchannel_logout_failed には fslo が表示される場合があります。

クライアントアプリで受信した Logout Token を検証できない

トランザクションが引き続き 400 エラーで失敗する場合:
  1. トークンが標準的な base64 エンコードの JWT かどうかを確認します。一部の Web サーバーでは、長いパラメーターが途中で切り詰められることがあります。詳細は、Signing Algorithms を参照してください。
  2. 可能であれば、トークンを取得して、それが JWT であることを確認します。JWT.IO などの信頼できるソースを使用してください。
  3. 検証関数が、JSON Web Key Sets (JWKS) を通じてテナントの署名鍵を動的に取得することを確認します。
    静的キーのハードコードは推奨されません。設定上、静的キーをハードコードする必要がある場合は、その設定に Auth0 テナントの最新の公開鍵が含まれていることを確認してください。

応答タイムアウト エラー

Auth0 は、アプリケーションの OIDC Back-Channel Logout URL からの応答を 5 秒間待機します。この時間を過ぎると、レスポンスの説明が空の「Failed OIDC Back-Channel Logout request」がテナントログに記録されます。

詳細情報