web-dev-qa-db-ja.com

値/参照トークン用のSpring Cloud + Zuul + JWT

記事を読んだ後マイクロサービス内でユーザーIDを制御する方法私はそのようなアクセス制御スキーム(値と参照トークン)を実装しようとしましたが、Spring Security + OAuth + Zuul、これをどのように達成できるかについての具体的な例を見つけることができませんでした。 [〜#〜] jwt [〜#〜]を含むすべての例は、トークンが返されたときにユーザーの詳細を返します。これは避けたいものです。ユーザーの詳細は、クライアントに直接到達することはありませんが、代わりにバックエンドサービスに渡される必要があります。チュートリアルSpring Security + AngularJsには、アプリケーションを安全なものに進化させるが、アクセストークンを使用するか、[〜#〜] jwt [〜#〜]を介してユーザー詳細を直接取得する可能性について言及します。

このSOの質問、認証ゲートウェイとしてのZuulの使用by@ phoenix7360は、まさに私が実装しようとしているアプローチですが、実行するために必要な構成の概要のみを提供しますマイクロサービスに対するこの種のセキュリティアプローチ。それがどうなるかについての明確な画像については、この質問の画像を参照してください。

Zuul Pre-Filterをどのように構成し、何をすべきかについて完全に理解することはできませんAuthorization Serverの構成は次のようになります。記事とSOの質問の両方で述べたように、フローは次のようになります。

外部(HTTPS)

  1. クライアントはOAuth2サーバーに対して認証します
  2. OAuthサーバーは不透明なアクセストークン(他の情報を含まないUUID)を返します
  3. クライアントは、Authorizationヘッダーのアクセストークンを使用してリクエストをAPI Gatewayに送信します
  4. API Gatewayは、Authorizationヘッダーのアクセストークンを使用してOAuthサーバーにユーザーの詳細を要求します
  5. OAuthサーバーはアクセストークンが有効であることを確認し、ユーザー情報をJSON形式で返します

内部(HTTP/S)

  1. API Gatewayはユーザーの詳細でJWTを作成し、秘密鍵で署名します
  2. API Gatewayは、リクエストにJWTを追加し、それをResource Serverに転送します
  3. リソースサーバーは、API Gatewayの公開鍵を使用してJWTを検証します

注:OAuthサーバーがアクセストークンが無効であることを示している場合、API Gatewayはエラーを返す必要があります。

ZuulFilterはどのように機能しますか? OAuthサーバーに対して(たとえば、RestTemplateを介して)新しいリクエストを発行する必要がありますか、またはこれらのスキームは現在の実装でサポートされていますか? OAuthとZuulの両方のJavaConfigクラスに必要な特定の構成はありますか?誰かが実際に役立つ実際の例を知っていて、このトピックに関する将来の参照に役立つ場合。

Spring Boot(1.4.0-M3)+ Spring OAuth + Spring Cloud(Eureka、Ribbon、Zuul)を使用しています

この質問は以前にリンクされた質問と非常に似ていることを知っています。これが正しい方法でない場合はお詫びしますが、SOスレッドで助けを求めるよりも新しいスレッドの方が良いと思いました別の問題を解決することを目的としました。

前もって感謝します!

24
Tom Kelly

JHipsterは、この問題を処理する上でかなり良い仕事をしています。ログインプロセスを簡単に説明したい場合は、最初にログインを行い、時間内に以下のサービスに渡す必要があるすべての情報(ユーザー名、電子メールなど)をフェッチしてから、それらをマイクロサービスに渡します。詳細については、oktaから以下のリンクを参照してください https://developer.okta.com/blog/2018/03/01/develop-microservices-jhipster-oauth

1
ksadjad