Keycloakとパブリック/フロントエンドのSpringBootアプリを正常にセットアップしました。すべてが期待どおりに機能しています。フロントエンドのSpringBootアプリは、レルム内のクライアント(app-ui)としてKeycloakで構成され、ユーザーはkeycloakを介してログインでき、トークンはすべてが正常に渡されます。 Spring Securityはエンドポイントを保護しており、エンドポイントの役割は尊重されています。
現在、ダウンストリームのSpring Boot App(Webサービス)をミックスに追加しようとしています。ログインしたユーザーを認識して、呼び出しを保護できるようにします。フロントエンドのSpringBootアプリはFeignClientを使用してバックエンドのSpringBootアプリのRESTエンドポイントを呼び出していますが、バックエンドは認証/承認を行っていません。
私は理解するのに苦労しているいくつかの質問があります:
How to integrate Keycloak and Spring Boot
について見たものをさらに一歩進めて、他のダウンストリームサービスも保護するデモまたはチュートリアルを見てみたいと思います。これがわかれば投稿します。
これは、バックエンドのSpring Bootアプリの標準のOAuth2構成で実行できると思いますが、このアーキテクチャを実現するためにどのように推奨されるかはわかりませんでした。
これが私がセットアップしようとしているアーキテクチャです:
認証されたユーザーの詳細をバックエンドの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