Zuulリバースプロキシユーティリティを使用してSpring Cloud(Angel.SR6)アプリケーションを設定しています。内部サービスポートを隠すためです。私のzuul(エッジ)サービスは8765ポートに公開されており、私の組織サービスは8083ポートにあります。セキュリティなしでアプリケーションにアクセスするとすべてがスムーズに進みます。http://localhost:8765/organization/organizations
はすべての組織でJSONを返します。ZuulリバースプロキシとKeycloakサーバ
しかし、認証目的でKeycloak SSO(OAuth2)サーバーを統合したいと考えています。 Spring Security adapterを組織サービスに追加し、http://localhost:8080/auth
で認証するように設定しました。 zuulがプロキシではなくリダイレクトを実行する点を除いて、すべてうまくいっています。したがって、認証が成功すると、の代わりにhttp://localhost:8083/organizations
にリダイレクトされます。
keycloakアダプタは、それがトークンを検証するために、認証サーバーにリダイレクトを行い、そこからhttp://localhost:8083/sso/login
におけるトークンの検証エンドポイントを作成しているためです。ここに私のブラウザの要求があります。認可サーバーがそれを確認すると、/organization
パスのリダイレクトが組織サービスに送信されるため、ロードされる最後のURLはhttp://localhost:8083/organizations
です。しかし、最初に要求されたURLを代わりにロードしたいと思います。
どの選択肢がありますか?
私が言うことの一つは、zuulはそれ自身でリダイレクトを行わず、応答を転送するだけなので、下流のサービスがリダイレクトを送信すると、zuulはそれをブラウザに転送します。 – spencergibb
@spencergibb、私は知っています。実際、問題はSSOサーバーにリダイレクトするログインエンドポイントが設定されたダウンストリームサービスにあります。 SSOサーバは、 '/ auth/realm/master?redirectUri = http:// localhost:8083/sso/login'のように、URLパラメータをurlパラメータとしてリダイレクトします。したがって、リダイレクトはSSOサーバーによってそのURLに実行され、最後の 'http:// localhost:8083/organizations'パスにリダイレクトされます。解決策はzuulサービスだけを保護することです。そのため、すべての要求をzuulにリダイレクトさせることになりますが、それは残りのサービスを公開したままにすることです。 –