web-dev-qa-db-ja.com

シングルサインオンログアウト戦略

私は、Spring-CloudベースのマイクロサービスとMVCアプリケーションをSSOと統合するプロジェクトに取り組んでいます。現在、セッションリポジトリサービスにはspring-sessionを使用しています。私の現在のアプリケーションログインコンポーネントには、バックエンドでセッションを作成するための認証サーバーと、そのようなログインサービスを呼び出すフロントエンドクライアントが含まれています。しかし、他のアプリケーションからログアウトする場合、現在の戦略は、このログインコンポーネントのログアウトページにリダイレクトしてから、バックエンドサービスにajax呼び出しを送信して、セッションリポジトリに保存されているセッションを期限切れに設定することです。このアプローチは、ユーザーがログインコンポーネントに正常にリダイレクトされてログアウトした場合にのみ機能します。

すべてのログアウト要求をログインコンポーネントにリダイレクトするのではなく、他のアプリケーションから直接ログアウトサービスを呼び出すことを考えましたが、他のすべてのアプリケーションには欠点があり、ログアウトサービスを実装する必要があります。

アプリケーションごとに重複するログアウトサービスの作成を最小限に抑えることができるSSO環境でユーザーセッションがログアウトされることを保証するために使用する一般的な戦略は何でしょうか。

1
Downhillski

私が思い出すと(そして私はSSO /フェデレーションの専門家ではありません)、SSOエコシステムでは、IDプロバイダーは「セッション参加者」(現在のセッションに参加しているサービスプロバイダー)のリストを持っている必要があります。

特定のユーザーに対してSSOされた3つのサービスプロバイダー(A、B、c)があるとします。そのユーザーがAでログアウトする(IDPにログアウト要求を送信する)と、IDPはBとC(他のアクティブなサービスプロバイダー)にログアウト要求を送信する必要があります。BとCはそれぞれ、関連付けられたセッションを無効にし、ログアウト応答を返す必要があります。 IDPに。

それが完了すると、IDPはログアウト応答をAに送信する必要があります。

このフローを回避すると、すべてのフェデレーションサービスプロバイダーを制御できないフェデレーション認証エコシステムで問題が発生する可能性があります。

1
railsdog