web-dev-qa-db-ja.com

マイクロサービスアーキテクチャ内でKeycloak + Spring Boot + Oauth2をセットアップする方法

Keycloakとパブリック/フロントエンドのSpringBootアプリを正常にセットアップしました。すべてが期待どおりに機能しています。フロントエンドのSpringBootアプリは、レルム内のクライアント(app-ui)としてKeycloakで構成され、ユーザーはkeycloakを介してログインでき、トークンはすべてが正常に渡されます。 Spring Securityはエンドポイントを保護しており、エンドポイントの役割は尊重されています。

現在、ダウンストリームのSpring Boot App(Webサービス)をミックスに追加しようとしています。ログインしたユーザーを認識して、呼び出しを保護できるようにします。フロントエンドのSpringBootアプリはFeignClientを使用してバックエンドのSpringBootアプリのRESTエンドポイントを呼び出していますが、バックエンドは認証/承認を行っていません。

私は理解するのに苦労しているいくつかの質問があります:

  1. 認証されたユーザーの詳細をバックエンドのSpringBootアプリ(RequestInterceptor/RestTemplate/Feign config/Http Headers)に渡すようにフロントエンドのSpring Bootアプリを設定するにはどうすればよいですか?
  2. アップストリームのSpringBootアプリから受け取った認証済みユーザーの詳細を使用するようにバックエンドのSpringBootアプリを構成するにはどうすればよいですか?また、それを容易にするためにバックエンドのSpring Bootアプリに追加する必要がある依存関係(org.keycloak:keycloak -spring-boot-starterおよびorg.springframework.boot:spring-boot-starter-security)?
  3. バックエンドのSpringBootアプリ用にKeycloakで構成する必要があるものはありますか?機密/非公開クライアント(app-apiなど)としてKeycloakに登録する必要がありますか?
  4. バックエンドのSpringBootアプリで構成するための特定のものはありますか? Keycloakと通信して、アップストリームの呼び出し元から受信した認証済みユーザーの詳細を確認しますか?

How to integrate Keycloak and Spring Bootについて見たものをさらに一歩進めて、他のダウンストリームサービスも保護するデモまたはチュートリアルを見てみたいと思います。これがわかれば投稿します。

これは、バックエンドのSpring Bootアプリの標準のOAuth2構成で実行できると思いますが、このアーキテクチャを実現するためにどのように推奨されるかはわかりませんでした。

これが私がセットアップしようとしているアーキテクチャです:

Spring Boot and Keycloak Architecture

5
Dean Poulin

認証されたユーザーの詳細をバックエンドのSpring Bootアプリ(RequestInterceptor/RestTemplate/Feign config/Http Headers)に渡すようにフロントエンドのSpring Boot Appを設定するにはどうすればよいですか?

Httpリクエストヘッダーでベアラートークンを渡す必要があります。

アップストリームのSpring Bootアプリから受け取った認証済みユーザーの詳細を使用するようにバックエンドのSpringBootアプリを構成するにはどうすればよいですか?また、バックエンドのSpringBootアプリにどの依存関係を追加する必要がありますかそれを容易にするために(org.keycloak:keycloak-spring-boot-starterおよびorg.springframework.boot:spring-boot-starter-security)?

「back-end-client」などのレルムに新しいクライアントを追加し、その「AccessType」を「beareronly」に設定する必要があります。追加の「keycloak-adapter-bom」にも、「keycloak-spring-boot-starter」と「spring-boot-starter-security」の依存関係が必要になります。 application.propertiesには、以下のプロパティが必要です。

keycloak.realm =
keycloak.auth-server-url = your keycloak url
keycloak.ssl-required =external
keycloak.bearer-only=true
keycloak.resource =yout client name
keycloak.credentials.secret= your secret key
keycloak.security-Constraints[0].authRoles[0] = user
keycloak.security-Constraints[0].securityCollections[0].patterns[0] = /*
keycloak.cors=true

バックエンドのSpring Bootアプリ用にKeycloakで設定する必要があるものはありますか?機密/非公開クライアント(app-apiなど)としてKeycloakに登録する必要がありますか?

新しいクライアントを作成する必要があり、「ベアラのみ」として登録する必要があります

このリンクを参照できます: https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/Java/spring-boot-adapter.html

0
Mahesh J