始める前に
バックチャネルログアウトを使用するには、アプリケーションが以下の要件を満たす必要があります。
- Auth0テナントがアクセスできるように、OIDCバックチャネルログアウトのURIエンドポイントがインターネット上で公開されている必要があります。
- 本番環境の準備が整ったアプリケーションはTLSを使用する必要があります。詳細については、「TLS(SSL)のバージョンと暗号」をお読みください。
- アプリケーションは提供されたセッション識別子(
sid
)を保管し、作成するユーザーセッションとその識別子を関連付けられなくてはなりません。本番環境のアプリケーションにはセッションで持続性ストレージの使用を推奨します。 - アプリケーションは、クライアント側のクッキーを使うことなく、ログアウトプロセス中に
sid
を使って既存のセッションを取得できなくてはなりません。クッキーはブラウザー内に存在しており、ログアウトコールバックのエンドポイントにはアクセスできません。
利用
OIDCバックチャネルログアウトは、すべてのエンタープライズプランのお客様が利用するためのものです。アプリケーションが要件を満たしているかを確認するには、OIDC標準の/.well-known/*
メタデータエンドポイントを確認する必要があります。
バックチャネルログアウトでの制約
バックチャネルログアウトURLは公開されたエンドポイントで呼び出され、特定の制約を守らなければなりません。- HTTPSプロトコルを使用する必要があります。暗号化されていない HTTPや他のプロトコルは許可されません。
-
Auth0のサブドメインを使用してはいけません。Auth0のサブドメインには以下が挙げられます。
- auth0.com
- auth0app.com
- webtask.io
- webtask.run
- ドメインのないIPアドレスの使用は推奨されません。バックチャネルログアウトを使用するには、IPアドレスが公開IPでなければなりません。範囲が内部、予約済み、またはループバックのIPアドレスは許可されていません。
Auth0を構成する
またはを使用してログアウトトークンを取得するには、アプリケーションを登録します。- Auth0 Dashboard
- Management API
アプリケーションの登録
- [Auth0 Dashboard] > [Applications(アプリケーション)] に移動します。
- 登録したいアプリケーションを選択します。
- [Settings(設定)] タブを選択します。
- [OpenID Connect Back-Channel Logout(Open ID Connectバックチャネルログアウト)] > [Back-Channel Logout URI(バックチャネルログアウトURl)] の下に、logout_tokensを受け取るアプリケーションのログアウトURIを追加します。
-
完了したら、 [Save Changes(変更を保存)] を選択します。
アプリケーションの登録解除
アプリケーションの登録を解除すると、新しいログインのトラッキングやログアウトイベントの送信といったサービスが停止します。アプリケーションの登録が解除されると、ログアウトイベントのペンディングが破棄されます。アプリケーションのサブスクライブを解除するには、バックチャネルのログアウトURLを削除します。- [Auth0 Dashboard] > [Applications(アプリケーション)]に移動します。
- 登録したいアプリケーションを選択します。
- [Settings(設定)] タブを選択します。
- [OpenID Connect Back-Channel Logout(OpenID Connectバックチャネルログアウト)] > [Back-Channel Logout URI(バックチャネルログアウトURI)] の下
- バックチャネルURLを削除する
-
完了したら、 [Save Changes(変更を保存)] を選択します。
API Operation Event
として常にロギングしています。詳細については、「ログ」をお読みください。アプリケーションを構成する
Auth0 DashboardまたはManagement APIを使用してバックチャネルログアウトを構成したら、技術やフレームワークに基づいて、アプリケーションがサービスを使用できるように構成します。-
アプリケーションの種類に応じてエンドユーザーの認証を実装します。
- エンドユーザーがアプリケーションにログイン可能で、セッションが作成されなければなりません。
- IDトークンがAuth0から発行され、アプリケーションのバックエンドで処理するためにアクセスできなければなりません。
-
IDトークンが検証された後、ログインプロセスを拡張して
sid
クレームと、任意でsubクレームを保存します。- これらのクレームは、現在のアプリケーションセッションに対して保存されなければなりません。
- セッション管理機能は、
sid
値によって特定のセッションを取得できる必要があります。
-
バックチャネルログアウトのエンドポイントを構成します。
- エンドポイントは
HTTP POST
要求のみを処理する必要があります。 logout_token
パラメーターを抽出し、仕様に従って通常のJWTとして検証します。- トークンに、JSONオブジェクト値と
http://schemas.openid.net/event/backchannel-logout
という名前のメンバーを含むeventsクレームが含まれていることを確認します。 - トークンに
sid
クレームおよび/またはsub
クレームが含まれていることを確認します。 - トークンに
nonce
クレームが含まれていないことを確認します。これは、不正使用を防止するために、ログアウトトークンとIDトークンを区別するのに必要です。 - トークンが検証されると、受信した
sid
やsub
値に対応するセッションを取得して終了します。実際のアプリケーションセッションの終了プロセスは、実装の詳細によって異なります。たとえば、このイベントはフロントエンドに知らせる必要があるかもしれません。
- エンドポイントは
OIDCバックチャネルログアウト要求の例
エンコードされたトークンのペイロード:cURL
トークンの有効期間は2分間(120秒)です。
JSON
予期される応答
- HTTP 200 :特定のアプリケーションでユーザーのログアウトが確認されました。
- HTTP 400 :不正な要求です。要求が理解不可能か、トークンが検証に失敗しました。Auth0はテナントログに問題を記録しますが、特定のセッションに対してさらに要求を送ろうとはしません。
問題のトラブルシューティング
アプリケーションがログアウトイベントを取得しない
アプリケーションがログアウトイベント後にログアウト要求を取得しない場合には、以下を行います。- アプリケーションが、Auth0 DashboardでバックチャネルログアウトURLに登録されていることを確認します。
- バックチャネルログアウトURLにAuth0テナントから到達できることを確認します。
-
有効なセッションが確立されていることを確認します。エンドユーザーはAuth0を介して特定のアプリケーションにログインしなければなりません。
アプリケーションは、エンドユーザーがAuth0でそのアプリにログインしたときだけ、ログアウトイベントを受け取ります。エンドユーザーが他のアプリケーションにログインした場合、ログアウトイベントはトリガーされません。
- Auth0のテナントログで、ログアウトのメッセージ送信が失敗したというメッセージを確認します。
- ログアウトが標準のログアウトエンドポイントを通してトリガーされていることを確認します。他のイベントはログアウトイベントをトリガーしません。
- 可能であれば、Webサーバーのログとアプリケーションのファイアウォールのログで、阻止された要求を確認します。
- バックチャネルログアウトエンドポイントで有効な証明書(自己署名ではない)を使用していることを確認します。
OIDCバックチャネルログアウトのテナントログが見つからない
この機能は、2023年10月3日から、すべてのテナントに対して段階的にリリースされました。oidc_backchannel_logout_succeeded
にはsslo
、oidc_backchannel_logout_failed
にはfslo
のテナントログイベントコードが引き続き受信される場合があります。
クライアントアプリが受信したログアウトトークンを検証できない
トランザクションが400エラーで失敗する場合には、以下を行います。- トークンが標準のBase64でエンコードされたJWTであることを確認します。Webサーバーによっては、長いパラメーターを切る詰めることがあります。詳細については、「署名アルゴリズム」をお読みください。
- 可能であれば、トークンをキャプチャして、JWTであることを確認します。JWT.IOなど、検証済みのソースを使用します。
-
検証機能がJSON Web Key Sets(JWKS)を通してテナントの署名キーを動的に取得することを確認します。
静的キーをハードコードすることは推奨されません。静的キーをハードコードすることが構成の要件となっている場合は、Auth0テナントが生成した最新の公開鍵を必ず構成に含めてください。