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

标签 java spring-boot oauth-2.0 microservices keycloak

我已经成功设置了 Keycloak 和一个公共(public)/前端 spring boot 应用程序。一切都按预期工作。前端Spring Boot App在Keycloak中配置为领域中的客户端(app-ui),用户可以通过keycloak登录, token 成功传递一切都很好。 Spring Security 正在保护端点和端点的角色。

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

我有几个问题想不通:

  1. 如何设置前端 Spring Boot 应用以将经过身份验证的用户详细信息传递到后端 Spring Boot 应用(RequestInterceptor/RestTemplate/Feign config/Http Headers)?
  2. 如何配置后端 Spring Boot 应用程序以使用它从上游 Spring Boot 应用程序接收到的经过身份验证的用户详细信息,以及我需要将哪些依赖项添加到后端 Spring Boot 应用程序以实现这一点 (org. keycloak:keycloak-spring-boot-starter 和 org.springframework.boot:spring-boot-starter-security)?
  3. 我需要在 Keycloak 中为后端 Spring Boot 应用程序配置什么吗?是否应该在 Keycloak 中注册为 secret /非公开客户端(例如 app-api)?
  4. 后台Spring Boot App有没有什么具体需要配置的?它是否与 Keycloak 对话以验证它从上游调用者那里收到的经过身份验证的用户详细信息?

我很想看到一个演示或教程,它比我看到的关于如何集成 Keycloak 和 Spring Boot 更进一步,以保护任何其他下游服务。如果我能解决这个问题,我会发布一个。

我假设这可以通过后端 Spring Boot 应用程序上的标准 OAuth2 配置来完成,但我不确定建议如何实现此架构。

这是我要设置的架构:

Spring Boot and Keycloak Architecture

最佳答案

如何设置前端 Spring Boot 应用以将经过身份验证的用户详细信息传递到后端 Spring Boot 应用(RequestInterceptor/RestTemplate/Feign config/Http Headers)?

您需要在您的 http 请求 header 中传递 bearer-token。

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

您需要在领域中添加一个新客户端,例如“back-end-client”,并将其“访问类型”设置为“仅承载”。您将需要 '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 =your 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 中注册为 secret /非公开客户端(例如 app-api)?

您需要创建一个新的客户端并且它应该被注册为“bearer only”

您可以引用此链接:https://www.keycloak.org/docs/latest/securing_apps/#_spring_boot_adapter

关于java - 如何在微服务架构中设置 Keycloak + Spring Boot + Oauth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147838/

相关文章:

java - ThreadLocal 供应商?

java - 可以将带有变量的字符串存储在数组中吗?

java - 使用 Spring Boot 的 Spring MVC WebApp 无法启动 "*.jsp"文件

java - 在 Java EE 项目中,删除我的类后,我无法取回它们?

java - 测试设置例程设计模式

java - 如何在 Spring Boot 中设置 ActiveMQ 端口?

java - 使用 init.d 运行 SpringBoot Jar 时出错

c# - 用于服务应用程序的 Google oAuth 2.0(JWT token 请求)

frameworks - 使用 OAUTH2 授权请求 header 进行 Robot Framework api 测试

web-services - 是否有一种安全的方法来实现我的客户将嵌入的客户端代码片段