質問: また、そもそもこういった設計(異なるコンテキスト間でログイン情報を共有する)に問題があるのではないかとも考えているのですが、これこれこういった問題があるという話にたどり着けませんでした。 この設計にセキュリティ的な問題などがあればご指摘をいただきたいです。
回答: セキュリティ的な部分は門外漢なのでコメントできないのですが、SSO的な機能の実装にはJWT(JSON Web Token)を検討されてはいかがでしょうか。 JWTについては、認証におけるJWTの利用について - Qiitaが詳しいですが、簡単に説明すると ”認証サーバーでIDとパスワードでユーザーを認証し、認証できればシークレットキーを使ってJWTを発行します。以降はこのJWTをリクエストヘッダーにセットして、それぞれのアプリケーションへアクセスします。それぞれのアプリケーションではリクエストヘッダーのトークンをシークレットキーで検証(verify)します。” 注意点としては * トークンのペイロードと呼ばれる部分に持つデータは誰にでもデコードできるので、外部に露出してはいけない情報は格納してはいけないという点 * 発行したトークンを無効化する手段がないという点(トークンには有効期限が設定できますが、任意のタイミングで無効にすることはできません。) * たとえば、ログアウトした場合にそのトークンを無効にするといったことはできないです。(たぶん)なので対応するとすればブラックリストのようなものを作って無効化したいトークンを登録し、認証時にブラックリストと照合するといった実装が必要です。 **参考** * Single Sign On (SSO), Scalable Authentication Example with JSON Web Token (JWT) and Spring Boot * Using Auth0 with Spring Boot and Spring Security for Single Sign On (SSO)