「OIDC Back-Channel Logout」は、OIDC(OpenID Connect)認証におけるセキュアなログアウトメカニズムの一つです。この方式の目的と特徴を以下に説明します。
目的
- セキュアなログアウト: バックチャネルログアウトの主な目的は、ユーザーのセッションを確実かつセキュアに終了することです。ユーザーのブラウザを経由せずに、IdP(アイデンティティプロバイダ)とクライアントサーバー間で直接通信を行い、セッションを無効化します。
- 信頼性向上: ブラウザを使用したログアウト(フロントチャネルログアウト)では、通信の信頼性がユーザーのブラウザに依存しますが、バックチャネルログアウトではサーバー間で通信を行うため、ログアウト処理の信頼性が向上します。
- 複数クライアントのセッション管理: シングルサインオン(SSO)環境では、同じ認証情報を使用する複数のクライアントにおいてセッションを同時に終了することが必要です。バックチャネルログアウトは、複数のクライアントに対して確実にセッション終了を通知できます。
特徴
- サーバー間通信: OIDCプロバイダ(IdP)がバックチャネルログアウトリクエストをクライアントのサーバーに直接送信します。ユーザーのブラウザは介在しないため、ユーザーがログアウト後にブラウザを閉じたり、通信が中断されてもセッション終了の通知は送信されます。
- 高いセキュリティ: サーバー間の直接通信は、ブラウザを経由するフロントチャネルログアウトに比べて、CSRF(クロスサイトリクエストフォージェリ)などの脆弱性を減らすことができます。
- セッションの一貫性: IdPは、セッションIDやログアウトトークンを使用して、関連するすべてのクライアントに対して同じユーザーのセッション終了を通知します。これにより、クライアント間でセッション状態が一貫して保たれます。
- 同期・非同期対応: クライアントはバックチャネルログアウトリクエストを同期的または非同期的に処理できます。これにより、クライアント側でセッションの無効化が適切に行われるように設計することができます。
実装の流れ
- ユーザーのログアウトリクエスト: ユーザーがOIDCプロバイダにログアウトリクエストを送信します。
- ログアウト通知の送信: OIDCプロバイダは、登録されているすべてのクライアントに対してバックチャネルログアウトリクエストを送信します。この通知はHTTP POSTリクエストで行われ、ログアウトトークンが含まれます。
- クライアント側のセッション無効化: 各クライアントはログアウト通知を受け取り、対象となるセッションを無効化します。
- レスポンス: クライアントは通知を受け取ったことを確認するためにレスポンスをOIDCプロバイダに返します。
利点と制約
利点:
- 高いセキュリティレベルでのセッション終了。
- 複数クライアントへの確実なログアウト通知。
- ユーザー体験に依存しないログアウト処理。
制約:
- クライアントサーバーがバックチャネルログアウトに対応している必要がある。
- 通信経路や設定が適切に構成されていないと通知の受信に失敗するリスクがある。
バックチャネルログアウトは、特にセキュリティを重視した環境や複数クライアントを一貫して管理する必要があるシングルサインオン環境で重要な仕組みです。