で応答する場合、Zuul APIゲートウェイでOAuth2認証を起動する方法3つのSpringクラウド(ブート)アプリケーションを試しています。バックエンドサンプルに対するポート9999 ダウンストリームサービスが401.
- アン認証サーバポート9008
- に確保している基本的なバックエンドサンプルと保護されていないエンドポイントのいくつかの経路(固定および保護されていない)との基本的なZuul APIゲートウェイポートで9000
バックエンド・サンプルのブートアプリケーションは、リソースサーバ(@EnableResourceServer)と注釈されているとResourceServerConfigurerAdapterで一部のエンドポイントを保護し
Zuul APIゲートウェイで保護されているルートのうちの1つを最初に呼び出すと、認証サーバーのログインページにリダイレクトされます。そこにログインすると、最初に要求した保護されたルートにリダイレクトされます。保護されたバックエンド - サンプルエンドポイントは、期待どおりに動作します。つまり、バックエンドサンプルは、指定されたトークンに対して許可されたロールを取得します。私が適切な役割を持っていないバックエンドサンプルのエンドポイントにヒットした場合は、OAuth 403の応答が得られます。この場合はすべて問題ありません。
APIゲートウェイの背後にもレガシーサービスを配置する必要があります。これらはhtmlをレンダリングし、ユーザーがそこで安全な領域にヒットしたときにログインを開始できるはずです。従来のバックエンドには、さまざまなサブURLの複雑な(成長した)アクセス許可モデルがあるため、APIゲートウェイルートレベルでこれらの領域を保護することはできません。
このようなダウンストリーム401応答のケースで、SpringクラウドAPIゲートウェイを認証サーバーのログインにリダイレクトする良い方法は誰も知っていますか?私は "post"型のZuulFilterで単純なリダイレクトを試みましたが、応答が既にそこにコミットされているので失敗しました。
バックエンドサンプルapplication.yml;
server:
port: 9008
security:
oauth2:
resource:
userInfoUri: http://localhost:9999/uaa/user
APIゲートウェイapplication.yml:
server:
port: 9008
zuul:
proxy:
addProxyHeaders: true
sensitive-headers:
routes:
unsecured-backend-sample:
path: /unsecured-backend-sample/**
url: http://localhost:9008
authorized-backend-sample:
path: /authorized-backend-sample/**
url: http://localhost:9008/
user-role-secured-backend-sample:
path: /user-role-secured-backend-sample/**
url: http://localhost:9008/
xxx-role-secured-backend-sample:
path: /xxx-role-secured-backend-sample/**
url: http://localhost:9008/
security:
oauth2:
client:
accessTokenUri: http://localhost:9999/uaa/oauth/token
userAuthorizationUri: http://localhost:9999/uaa/oauth/authorize
clientId: acme
clientSecret: acmesecret
resource:
userInfoUri: http://localhost:9999/uaa/user
はあなたのポストフィルタは、前またはSendResponseFilter後に実行しましたか? – spencergibb
スペンサーを見ていただきありがとうございます。私は私の最初の試みがSendResponseFilterの後にあったと思う。それは遅すぎる。私はZuulFilterソリューションを見つけて答えとして投稿します。あなたがそれをコメントすることができれば涼しいだろう。あなたがそれを気に入っていて、それがSpring Cloudのアーキテクチャコンセプトと互換性があると思うなら、私はそれをコミットしたいと思います。 –