OIDC(OpenID Connect)認証におけるログアウト処理は、セキュリティとユーザー体験を確保しながらユーザーがセッションを終了するための方法です。OIDCではログアウト処理が「フロントチャネルログアウト」と「バックチャネルログアウト」の2つの方法に分けられます。それぞれの仕組みを以下に説明します。
1. フロントチャネルログアウト(Front-Channel Logout)
フロントチャネルログアウトは、ユーザーのブラウザを通じて複数のクライアント(Relying Parties, RPs)で同時にログアウトを行う方法です。
仕組み:
-
ログアウトエンドポイント: OIDCプロバイダ(IdP)が提供するログアウト用のエンドポイント(
end_session_endpoint
)にユーザーがアクセスします。 - セッション削除: このエンドポイントにアクセスすると、OIDCプロバイダはユーザーのセッションを終了します。
- ログアウト通知: ログアウト処理中に、OIDCプロバイダは登録された全てのクライアントに通知し、ブラウザ上でiframeを介してクライアント側のセッションも終了します。
- リダイレクトURL: ログアウト後、ユーザーは指定されたURLにリダイレクトされます。
この方式では、ユーザーのブラウザを経由するため、ブラウザを通じて複数のクライアントに対して同時にログアウトリクエストを送信できます。
2. バックチャネルログアウト(Back-Channel Logout)
バックチャネルログアウトは、よりセキュアで信頼性のある方法で、サーバー間でログアウト通知が行われます。ユーザーのブラウザを介さず、IdPから直接クライアントサーバーにログアウト通知が送られます。
仕組み:
- ログアウト通知: OIDCプロバイダがクライアントにバックチャネルログアウトリクエストをサーバー間通信で送信します。
- セッション無効化: クライアントはこの通知を受け取り、ユーザーのセッションを無効化します。
- 同期的/非同期的処理: クライアントはリクエストを同期的または非同期的に処理することが可能です。
この方式は、ユーザーがブラウザを閉じたりブラウザを介した通信が失敗した場合でも、確実にセッションを終了できるため、フロントチャネルログアウトよりも信頼性が高いです。
3. ログアウトに伴う注意点
- セッション情報の削除: ログアウトの際は、クライアント側でもユーザーのセッション情報を確実に削除する必要があります(例: クッキーやローカルストレージのクリア)。
- リダイレクトの確認: ログアウト後のリダイレクトURLは、セキュリティ的な観点から事前に登録・許可されたURLであるべきです。
-
IDトークンの送信: ログアウトリクエストには、セッションを識別するために
id_token_hint
を含めることがあります。
ログアウト処理の例
OIDCのログアウトリクエストのURLは以下のようになります。
https://idp.example.com/logout?post_logout_redirect_uri=https://client.example.com&state=xyz&id_token_hint=<ID Token>
-
post_logout_redirect_uri
: ログアウト後のリダイレクト先URL。 -
id_token_hint
: ログアウトするセッションに関連付けられたIDトークン。 -
state
: セキュリティ用のパラメータで、CSRF対策のために使用されます。
このように、OIDC認証におけるログアウト処理は、セッションの終了とクライアント間の連携を考慮した多様なアプローチが存在し、それぞれの方法が特定のニーズに対応しています。