如何在微服务架构中设置 Keycloak + Spring Boot + Oauth2
How to Setup Keycloak + Spring Boot + Oauth2 within Microservice Architecture
我已经成功设置了 Keycloak 和 public/front-end spring 启动应用程序。一切都按预期工作。前端 Spring Boot App 在 Keycloak 中配置为领域中的客户端 (app-ui),用户可以通过 keycloak 登录,令牌成功传递一切都很好。 Spring 安全性正在保护端点,并且端点的角色受到尊重。
现在,我正在尝试在组合中添加一个下游 Spring 引导应用程序(Web 服务),我希望它知道已登录的用户,以便能够保护对它的调用。前端 Spring Boot App 正在使用 Feign Client 调用后端 Spring Boot App 上的 REST 端点,但后端没有做任何事情 authentication/authorization.
我有几个问题想不通:
- 如何设置前端 Spring 引导应用程序以将经过身份验证的用户详细信息传递到后端 Spring 引导应用程序(RequestInterceptor / RestTemplate / Feign config / Http Headers)?
- 如何配置后端 Spring Boot App 以使用它从上游接收到的经过身份验证的用户详细信息 Spring Boot App 以及我需要向后台添加哪些依赖项结束 Spring 引导应用程序以促进这一点(org.keycloak:keycloak-spring-boot-starter 和 org.springframework.boot:spring-boot-starter-security)?
- 我需要在 Keycloak 中为后端 Spring Boot App 配置什么吗?是否应该在 Keycloak 中注册为 confidential/non-public 客户端(例如 app-api)?
- 后端Spring Boot App 中是否有任何特定需要配置的内容?它是否与 Keycloak 对话以验证它从上游调用者接收到的经过身份验证的用户详细信息?
我很想看到一个演示或教程,它使我看到的关于 How to integrate Keycloak and Spring Boot
的演示或教程更进一步,以确保任何其他下游服务的安全。如果我能解决这个问题,我会 post 一个。
我假设这可以通过后端 Spring Boot App 上的标准 OAuth2 配置来完成,但我不确定建议如何实现此架构。
这是我要设置的架构:
如何设置 front-end Spring 引导应用程序以将经过身份验证的用户详细信息传递给 back-end Spring 引导应用程序(RequestInterceptor / RestTemplate / Feign 配置 / Http Headers)?
您需要在您的 http 请求 header 中传递 bearer-token。
如何配置 back-end Spring Boot App 以使用它从上游 Spring Boot App 接收的经过身份验证的用户详细信息以及我需要哪些依赖项需要添加到 back-end Spring 启动应用程序以方便 (org.keycloak:keycloak-spring-boot-starter 和 org.springframework.boot:spring-boot-starter-security)?
您需要在领域中添加一个新客户端,例如 "back-end-client" 并将其 "Access Type" 设置为 'bearer only'。您将需要 '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 中为 back-end Spring Boot App 配置什么吗?是否应该在 Keycloak 中注册为 confidential/non-public 客户端(例如 app-api)?
您需要创建一个新客户端,它应该注册为 "bearer only"
你可以参考这个 link : https://www.keycloak.org/docs/latest/securing_apps/#_spring_boot_adapter
我已经成功设置了 Keycloak 和 public/front-end spring 启动应用程序。一切都按预期工作。前端 Spring Boot App 在 Keycloak 中配置为领域中的客户端 (app-ui),用户可以通过 keycloak 登录,令牌成功传递一切都很好。 Spring 安全性正在保护端点,并且端点的角色受到尊重。
现在,我正在尝试在组合中添加一个下游 Spring 引导应用程序(Web 服务),我希望它知道已登录的用户,以便能够保护对它的调用。前端 Spring Boot App 正在使用 Feign Client 调用后端 Spring Boot App 上的 REST 端点,但后端没有做任何事情 authentication/authorization.
我有几个问题想不通:
- 如何设置前端 Spring 引导应用程序以将经过身份验证的用户详细信息传递到后端 Spring 引导应用程序(RequestInterceptor / RestTemplate / Feign config / Http Headers)?
- 如何配置后端 Spring Boot App 以使用它从上游接收到的经过身份验证的用户详细信息 Spring Boot App 以及我需要向后台添加哪些依赖项结束 Spring 引导应用程序以促进这一点(org.keycloak:keycloak-spring-boot-starter 和 org.springframework.boot:spring-boot-starter-security)?
- 我需要在 Keycloak 中为后端 Spring Boot App 配置什么吗?是否应该在 Keycloak 中注册为 confidential/non-public 客户端(例如 app-api)?
- 后端Spring Boot App 中是否有任何特定需要配置的内容?它是否与 Keycloak 对话以验证它从上游调用者接收到的经过身份验证的用户详细信息?
我很想看到一个演示或教程,它使我看到的关于 How to integrate Keycloak and Spring Boot
的演示或教程更进一步,以确保任何其他下游服务的安全。如果我能解决这个问题,我会 post 一个。
我假设这可以通过后端 Spring Boot App 上的标准 OAuth2 配置来完成,但我不确定建议如何实现此架构。
这是我要设置的架构:
如何设置 front-end Spring 引导应用程序以将经过身份验证的用户详细信息传递给 back-end Spring 引导应用程序(RequestInterceptor / RestTemplate / Feign 配置 / Http Headers)?
您需要在您的 http 请求 header 中传递 bearer-token。
如何配置 back-end Spring Boot App 以使用它从上游 Spring Boot App 接收的经过身份验证的用户详细信息以及我需要哪些依赖项需要添加到 back-end Spring 启动应用程序以方便 (org.keycloak:keycloak-spring-boot-starter 和 org.springframework.boot:spring-boot-starter-security)?
您需要在领域中添加一个新客户端,例如 "back-end-client" 并将其 "Access Type" 设置为 'bearer only'。您将需要 '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 中为 back-end Spring Boot App 配置什么吗?是否应该在 Keycloak 中注册为 confidential/non-public 客户端(例如 app-api)?
您需要创建一个新客户端,它应该注册为 "bearer only"
你可以参考这个 link : https://www.keycloak.org/docs/latest/securing_apps/#_spring_boot_adapter