如何在微服务架构中设置Keycloak + Spring Boot + Oauth2

时间:2018-11-05 03:13:06

标签: java spring-boot oauth-2.0 microservices keycloak

我已经成功设置了Keycloak和公共/前端spring boot应用程序。一切都按预期进行。前端Spring Boot App在Keycloak中配置为领域中的客户端(app-ui),用户能够通过keycloak登录,令牌成功传递了一切。 Spring Security正在保护端点,并尊重端点的角色。

现在,我正在尝试在组合中添加一个下游Spring Boot App(Web服务),我希望它能够意识到已登录的用户能够保护对其的调用。前端Spring Boot App正在使用Feign Client调用后端Spring Boot App上的REST端点,但是后端没有进行任何身份验证/授权。

我有几个问题难以解决:

  1. 如何设置前端Spring Boot应用程序以将经过身份验证的用户详细信息传递给后端Spring Boot App(RequestInterceptor / RestTemplate / Feign配置/ Http标头)?
  2. 如何配置后端Spring Boot应用程序以使用从上游Spring Boot App接收到的经过身份验证的用户详细信息,以及我需要向后端Spring Boot App添加哪些依赖项以简化此操作(组织。 keycloak:keycloak-spring-boot-starter和org.springframework.boot:spring-boot-starter-security)?
  3. 我需要在Keycloak中为后端Spring Boot应用程序配置什么吗?应该在Keycloak中将其注册为机密/非公开客户端(例如,app-api)吗?
  4. 后端Spring Boot应用程序中是否要配置任何特定内容?它是否与Keycloak进行对话以验证其从上游呼叫者收到的经过身份验证的用户详细信息?

我希望看到一个演示或教程,它将使我所见过的How to integrate Keycloak and Spring Boot向前迈进一步,以确保其他任何下游服务的安全。如果可以弄清楚,我会发布一个。

我假设可以通过后端Spring Boot App上的标准OAuth2配置完成此操作,但是我不确定如何建议采用这种架构。

这是我要设置的体系结构:

Spring Boot and Keycloak Architecture

1 个答案:

答案 0 :(得分:1)

如何设置前端Spring Boot应用程序以将经过身份验证的用户详细信息传递给后端Spring Boot App(RequestInterceptor / RestTemplate / Feign配置/ Http标头)?

您需要在http请求标头中传递承载令牌。

如何配置后端Spring Boot应用程序以使用它从上游Spring Boot App接收到的经过身份验证的用户详细信息,以及需要添加到后端Spring Boot App的哪些依赖项来简化该操作(org.keycloak:keycloak-spring-boot-starter和org.springframework.boot:spring-boot-starter-security)?

您需要在领域中添加新客户端,例如“后端客户端”,并将其“访问类型”设置为“仅承载者”。您还将需要'keycloak-spring-boot-starter'和'spring-boot-starter-security'依赖项,也需要在您添加的'keycloak-adapter-bom'中。 在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

我需要在Keycloak中为后端Spring Boot应用程序配置什么吗?应该在Keycloak中将其注册为机密/非公开客户端(例如,app-api)吗?

您需要创建一个新客户端,并且应将其注册为“仅承载者”

您可以参考以下链接:https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/spring-boot-adapter.html