OIDCアプリケーションのシングルログアウト
シングルログアウト(SLO)を利用すると、ユーザーはすべてのシングルサインオン対応アプリケーションから同時にログアウトすることができます。 この機能は、特にデバイスを他の人と共有している場合、残存しているセッションへの不正アクセスを防ぐことで、セキュリティを強化します。
シングルログアウト(SLO)機能を実装すると、3種類のセッションが存在することになります。
- 出願説明会
- このアプリケーションは、ユーザー認証に OpenID (OP)を使用していますが、アプリケーションにログインしたユーザーを追跡する可能性があります。 通常、アプリケーションはブラウザのクッキーを使用してセッションを追跡します。 このアプリケーションは、ログアウト時にセッションを消去する役割を担っています。
- 認証サーバーの OpenID プロバイダー(OP)セッション
- 認証サーバーは、ユーザーのセッションを維持し、それをCookie内に保存します。 認証サーバーは、ログアウト時にユーザーセッションを終了させるとともに、そのユーザーセッションに関連するアクセス許可やトークンも削除します。
- ID ソース セッション
- ユーザーは、ID ソースからのユーザー セッションを使用してサインインする場合があります。 ログアウトの際、ユーザーはそのユーザーセッションからもログアウトしたい場合があるかもしれません。
注: シングルログアウトでは、IDプロバイダーのセッションからのログアウトはサポートされていません。 また、 SAML アプリケーションからのログアウトもサポートしていません。 SAML には、 IdP-initiated やSP主導のログアウトを実行するための同様のエンドポイントがありますが、OIDCシングルログアウトとは統合されていません。
認証サーバー(OP)がアプリケーションに対してログアウトが実行されたことを通知するには、フロントチャネルとバックチャネルの2つの仕組みが存在する。 どちらのメカニズムにおいても、アプリケーションは、認証サーバーが呼び出すログアウトエンドポイントを登録します。 このエンドポイントは、アプリケーションがセッションをクリアするために使用するコードをラップしています。 アプリケーションのログアウトエンドポイントを呼び出すことは、信頼性が低い。なぜなら IBM® Verify 、再試行する義務も、アプリケーションが確実にセッションをクリアすることを保証する義務もないからである。 バックチャネルによるログアウトが推奨される方法です。
- フロントチャンネルのログアウト
- フロントチャネルログアウト、あるいはクライアントサイドログアウトとは、クライアント(通常はWebブラウザ)がサーバーと直接通信してユーザーのセッションを無効にする、シングルログアウト(SLO)の手法である。 通常、サーバーに対してセッション Cookie やトークンを削除するようリクエストを送信することで行われます。 その後、サーバーはログアウトを確認する応答を返します。 この方法はシンプルで、単一ドメインのシナリオではうまく機能します。 ただし、クロスオリジン通信やセキュリティに関する問題が生じる可能性があるため、複雑で、複数のドメインやプロトコルが混在する環境には適さない場合があります。 フロントチャネル方式を使用する場合、認証サーバー(OP)はページ内に をレンダリング
<iframe src="frontchannel_logout_uri">し、アプリケーションのログアウトエンドポイントへの 呼び出しをHTTP GETトリガーします。 アプリケーションは、セッションID (sid) および発行者 (iss) 情報を追加のクエリパラメータとして送信するよう、認証サーバーに要求することができます。 アプリケーションクライアントを動的クライアント登録を使用して作成する場合は、client metadata を true に設定frontchannel_logout_session_requiredしてください。 IBM Verifyなお、管理用UIで OpenID アプリケーションを設定する場合、この設定は 「サインオン 」タブから利用できます。 「シングルログアウト設定 」セクションまでスクロールし、 「セッションが必要 」チェックボックスを選択してください。 アプリケーションはこの情報を使用して、リクエストの有効性を確認し、どのセッションからログアウトするかを判断することができます。 がsid認証サーバー(OP)との現在のセッションまたは直近のセッションと一致しない場合、アプリケーションはログアウト要求を無視する可能性があります。注: OIDCフロントチャネルログアウトでは、 フロントチャネルログアウトエンドポイントを呼び出す際に、のiframe使用を推奨しています。iframe最新のブラウザでは、デフォルトでサードパーティのCookieが転送されるのをブロックしています。 アプリケーションのドメインが認証サーバーのドメインと異なる場合、アプリケーションはCookieを受け取らないため、ユーザーが正常にログアウトできなくなる可能性があります。 ユーザーは、認証サーバーのドメインに対してサードパーティ Cookie を許可するようにブラウザを設定する必要があります。 - バックチャネルからのログアウト
- バックチャネルログアウト(またはサーバーサイドログアウト)とは、IDプロバイダー( IdP )がサービスプロバイダー(SP)と直接通信してユーザーのセッションを無効化する、シングルログアウト(SLO)の手法である。 これは通常、初期認証プロセス中に IdP とSPの間で確立される安全な通信経路を通じて行われます。 バックチャネル方式を使用する場合、認証サーバー(n)は、直接的なバックチャネルAPIを介して、アプリケーションのログアウトエンドポイントに対して HTTP のPOSTリクエストを実行します。 認証サーバーは、以下の情報を含むログアウト用JWTトークンを発行します。
認証サーバー(OP)は、IDトークンと同様に、ログアウトJWTトークンの署名、暗号化、あるいはその両方を行うために、同じ設定を使用します。クレーム名 使用法 説明 iss必須 発行者識別子。 subオプション サブジェクト ID。 が存在しない場合は sid、存在しなければならない。aud必須 聴衆、または聴衆たち。 iat必須 その時点で発行された。 exp必須 有効期限。 jti必須 トークンの一意の識別子。 events必須 http://schemas.openid.net/event/backchannel-logoutメンバー名を含むJSONオブジェクト。 sidオプション セッション識別子。 が存在しない場合は sub、存在しなければならない。
end_session_endpointアプリケーション依存当事者(RP)が開始するログアウトのシナリオでは、アプリケーションは、認証サーバーのディスカバリーエンドポイントで公開されている認証サーバーのURLへリダイレクトすることで、ログアウトをトリガーします。 このアプリケーションは、以下のリクエストパラメータを送信する場合があります。| パラメーター名 | 使用法 | 説明 |
|---|---|---|
id_token_hint |
推奨 | 認証サーバーが、ユーザーとアプリケーションとの認証済みセッションに関するヒントとして発行したIDトークン。 |
logout_hint |
オプション | ログアウトするユーザーに関する、認証サーバーへのヒント。 |
| client_id | オプション | アプリケーションのクライアント識別子。 |
post_logout_redirect_uri |
オプション | ログアウト実行後、アプリケーションがユーザーのユーザーエージェントをリダイレクトするよう要求するURI。 |
state |
オプション | アプリケーションが、ログアウト要求とエンド post_logout_redirect_uri ポイントへのコールバックの間の状態を維持するために使用する不透明な値。 |
ui_locales |
オプション | ユーザーインターフェースでユーザーが希望する言語と文字体系。 |
id_token_hint 指定されていない場合、またはIDトークンが現在ログインしているユーザーのものではない場合、認証サーバーはユーザーに、認証サーバーのセッションを解除するかどうかを確認します。 次に、OP主導のログアウトのシナリオと同様に、認証サーバーは、同じ認証サーバー(OP)セッションでサインオンされたアプリケーションのリストを特定します。 これは、いずれかのチャネルログアウトメカニズムを使用してアプリケーションに通知します。 その後、ユーザーから同意が得られた場合、認証サーバーは自身のセッションをクリアします。 が post_logout_redirect_uri 指定され、かつクライアントの設定に基づいてその有効性が確認できる場合、ログアウト処理の終了時に、そのURIへのリダイレクトが行われます。 それ以外の場合は、認証サーバーがログアウトの概要レポートを表示します。ヒント: カスタムアプリケーションのログアウトエンドポイントを構築する場合は、
- フロントチャンネルのログアウト
- Verify アプリケーションのログアウトエンドポイントは、3秒以内に応答することを想定しています。
- バックチャネルでのログアウト
- Verify エンドポイントからは、成功時は 2xx、エラー時は400が返されるものと想定しています。
- Verify アプリケーションのログアウトエンドポイントは、3秒以内に応答することを想定しています。
- JWTログアウトトークンの検証を高速化するため、アプリケーションのログアウトエンドポイントはJWKSエンドポイントを Verify キャッシュします。