【问题标题】:How to Setup Keycloak + Spring Boot + Oauth2 within Microservice Architecture如何在微服务架构中设置 Keycloak + Spring Boot + Oauth2
【发布时间】:2019-04-08 10:13:02
【问题描述】:

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

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

我有几个问题想不通:

  1. 如何设置前端 Spring Boot App 以将经过身份验证的用户详细信息传递给后端 Spring Boot App(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 App 配置什么吗?是否应该在 Keycloak 中注册为机密/非公开客户端(例如 app-api)?
  4. 在后端 Spring Boot App 中是否有任何特定的配置?它是否与 Keycloak 对话以验证它从上游调用者那里收到的经过身份验证的用户详细信息?

我很想看到一个演示或教程,它可以将我看到的关于 How to integrate Keycloak and Spring Boot 的演示或教程更进一步,以确保任何其他下游服务的安全。如果我能解决这个问题,我会发布一个。

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

这是我正在尝试设置的架构:

【问题讨论】:

  • 嗨,Dean Poulin,您成功地将 Keycloak 集成到您的 Spring Boot 项目中了吗?如果是,您能否给我们一些与 UI 和后端配置文件相关的提示?您的 UI 使用了什么样的技术? Thymeleaf 或 Angular 以及如何将令牌发送到后端(弹簧启动安全性)。 Tbh,我是这项技术的新手,这就是为什么我努力寻找合适的资源来关注

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


【解决方案1】:

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

你需要在你的http请求头中传递bearer-token。

我如何配置后端 Spring Boot 应用程序以使用它从上游 Spring Boot 应用程序接收到的经过身份验证的用户详细信息,以及我需要向后端 Spring Boot 应用程序添加哪些依赖项以促进这一点(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 =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 App 配置什么吗?是否应该在 Keycloak 中注册为机密/非公开客户端(例如 app-api)?

您需要创建一个新的客户端,并且它应该被注册为“仅承载”

你可以参考这个链接:https://www.keycloak.org/docs/latest/securing_apps/#_spring_boot_adapter

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 2020-03-11
    • 1970-01-01
    • 2021-04-09
    • 2019-02-01
    • 2015-07-12
    • 1970-01-01
    • 2017-10-04
    • 2014-01-08
    相关资源
    最近更新 更多