問題タブ [netflix-zuul]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
911 参照

spring-boot - 2 つの異なるサービス ID として登録された同じサービスへのリクエストのルーティング

私のスプリング ブート アプリケーションでは、検出サービスに Eureka サーバーを使用しています。私の Discovery クライアント アプリケーションの 1 つで、zuul プロキシを使用して、Discovery Server に登録されているさまざまなサービスに要求をルーティングしています。

データをデータベースに格納する役割を担うリソース アプリケーションが 1 つあります。このサービスの 2 つのインスタンスを作成し、検出サービスで 2 つの異なるサービスとして登録しました。このサービス用に公開された API は、/resources Get、Post などです。

クライアント アプリケーションは、このリソース サービスの 2 つのインスタンスに対して、/definitions や /locations などの要求を送信します。

ここでの問題は、この /definitions を service-id 1/resources にマップし、場所を /service-id2/resources にマップすることです。

クライアント アプリケーションから /definitions を送信すると、リソース アプリケーションに /definitions が存在することが期待されるため、これを行う方法がわかりません。

私はこのようなことを試みています zuul: routes: locations: path: /locations/** rewrite: /resources/** serviceId: location_service stripPrefix: false definitions: path: /definitions/** rewrite: /resources/** serviceId: definition_service stripPrefix: false

0 投票する
1 に答える
3968 参照

oauth-2.0 - Spring Oauth 2 SSO、Zuul、および OpenAM の統合

はじめに、要件:

現在、Spring REST API と通信する AngularJS を使用してシングル ページ アプリケーションを作成しています。セキュリティ上の理由から、API へのすべてのリクエストをプロキシし、ユーザーが認証されていることを確認する zuul を使用してリバース プロキシをセットアップしたいと考えています。また、ユーザーが認証されていない場合は、OpenAM インスタンス (OAuth 2 承認サーバーとして機能する) にリダイレクトする必要があります。ユーザーが認証されている場合、少なくともユーザーの LDAP グループを含むヘッダーに Json Web トークン (JWT) を含むリクエストを API に転送する必要があります。

要するに、このチュートリアルのソリューションに似た API ゲートウェイのようなものが欲しいと思います: https://spring.io/blog/2015/02/03/sso-with-oauth2-angular-js-and-spring-セキュリティ-パート-v

現状

次の構成で Spring Cloud Security と Zuul をセットアップします。

Application クラスは次のようになります。

「example-application」に移動すると、OpenAM 認証ログイン画面に転送されます。資格情報を入力すると、「example-application」にアクセスできます。ゲートウェイ サービスのコンソール ログ:

Zuul フィルターによって読み取られる HTTP ヘッダー:

だから何かがうまくいく!REST-API に転送されるアクセス トークンがあります。

問題

1) このソリューションは私の要件を実際には満たしていません。なぜなら、REST API で OpenAM のトークン エンドポイントを呼び出させたくないからです。必要なクレームを含む JWT がヘッダーの API に渡されるようにします。ゲートウェイ (Zuul フィルターなど) で JWT を手動で作成する必要がありますか、それとも別の解決策がありますか?

2) 上記のソリューションでは、アクセス トークンの有効期限が切れると、Zuul は引き続き API に転送します。どうしてこれなの?Spring Oauth2 はアクセストークンの有効期限が切れているかどうかをチェックしませんか? どうすればそれを実装できますか?

3) application.yml で tokenInfoUri も構成しようとしましたが、OpenAM が tokeninfo-Endpoint で GET 要求を予期していると思われるため、"405 Method Not Allowed" 例外が発生します。これをどうにかカスタマイズできますか?リクエストを変更するには、どのクラスをオーバーライド/カスタマイズする必要がありますか。

アドバイス、アイデア、解決策があれば教えてください!

ありがとうございました!

0 投票する
1 に答える
3615 参照

spring-cloud - Spring Cloud と Netflix OSS を使用してマイクロサービス間でルーティングする方法

Spring Cloud を使用したマイクロサービスの開発中に、外部からマイクロサービスへの接続、および別のマイクロサービスに接続する必要があるマイクロサービスのプロキシとして Zuul の使用を開始しました。

しばらくして、Zuul はエッジ サービス (外部からマイクロサービスへのトラフィックのプロキシのみ) として設計されており、マイクロサービス間通信には使用すべきではないという結論に達しました。特に、Spring Cloud が eureka を使用して別のサービスに直接 (潜在的に負荷分散された) 接続を行うことを推奨している方法は、すべての間に Zuul を配置することに反対しました。

もちろん、すべてが期待どおりにうまく機能します (Spring Cloud では常にそうです) が、このセットアップで特定のユースケースを実行する方法についてはわかりません。

マイクロサービスの新しいバージョンをデプロイするときは、古いバージョンと新しいバージョンでブルー/グリーン デプロイを行いたいと考えています。ただし、マイクロサービス間に Zuul がないため、2 つの個別のサービス間の通信は、eureka から削除されるまで古いバージョンに進みます。

私たちはこれをどのように達成できるかを考えています。下の図では、オプションと思われるものを描きました。

図の最初の部分では、Zuul が eureka を呼び出してレジストリを取得し、ルートを作成します。また、サービス 1 は、レジストリを取得してサービス 2 にルーティングするために eureka を呼び出しています。サービス 2 は eureka レジストリにあるため、ルーティングは正常に行われます。

図の 2 番目の部分では、サービス 2 (サービス 2.1) の更新がデプロイされています。これは eureka にも登録され、サービス 1 がサービス 2 とサービス 2.1 の両方にルーティングされるようになります。これは、Blue/Green デプロイメントでは望ましくありません。

3 番目の部分では、この問題に対する潜在的な解決策が、この目的のためだけにデプロイされた eureka の別のインスタンスとともに紹介されます。このインスタンスはピア対応ではなく、最初の eureka インスタンスと同期しません。最初のインスタンスとは対照的に、このインスタンスの唯一の目的は、Blue/Green デプロイを容易にすることです。サービス 2.1 は 2 番目の eureka インスタンスに登録し、サービス 1 の構成は変更されて、最初からではなく 2 番目の eureka インスタンスからレジストリを取得します。

ここに画像の説明を入力

私たちが直面している主な問題は、これが実行可能な解決策であるかどうかです。Zuul のルーティングの柔軟性は、このシナリオにはない大きなプラスです。すべてのサービス間呼び出しを Zuul 経由でルーティングすることに戻すべきでしょうか、それともより適切な別のソリューション (おそらく何らかのリボン構成) がありますか? それとも、2 番目の eureka インスタンスは、このタイプの展開に最適なソリューションですか?

どんなフィードバックでも大歓迎です。

よろしく、アンドレアス

0 投票する
0 に答える
1487 参照

java - Spring OAuth 2 と OpenAM の統合、セッションごとの ClientContext

現時点では、Spring-Security-Oauth2、Zuul、OpenAM を OAuth2 認証サーバーとして、WCF REST API をリソース サーバーとして統合しようとしています。最終的なセットアップは次のようになります。

安全

spring と AngularJS を使用して SSO 環境をセットアップする方法を説明するチュートリアルを読みました ( sso with spring と angularJS )。ただし、私の場合は、OpenAM とパスワード付与フローを使用してユーザーを認証したいと考えています。したがって、Spring Boot アプリケーションでは、現在の構成は次のようになります。

カスタムの RemoteTokenService を作成しました。そうしないと、Spring が OpenAM の tokeninfo エンドポイントにアクセスできず、Post ではなく GET リクエストが必要になるためです。この接続は現在正常に機能しているため、OpenAM から有効なアクセス トークンを取得し、tokeninfo.endpoint でトークン/ユーザー情報を照会することもできます。Authentication オブジェクトが作成され、Spring のセキュリティ コンテキストに格納されます。ZuulFilter の認証オブジェクトにもアクセスできます。

私の問題は、「OAuth2ClientContext」を微調整して、servletRequest からユーザーの資格情報を取得し、それを「AccessTokenRequest」に配置する必要があることです。それ以外の場合は、ResourceDetails でそれらをハードコードする必要がありますが、これは私の場合には適切ではありません。

その結果、ClientContext (およびおそらく AccessTokenRequest も) がシステムのすべてのユーザー間で共有されます。私が欲しいのは、セッションスコープのクライアントコンテキストです。これにより、複数のユーザーをログインさせ、すべてのリクエストで各ユーザーの適切な SecurityContext にアクセスできます。

だから私の質問は、

1) ClientContext および AccessTokenRequest セッションをスコープ化するにはどうすればよいですか?

2) Spring Session モジュールを使用する必要がありますか?

3) sessionStrategy を設定する必要がありますか?

ありがとうございました!