我已成功设置Keycloak和公共/前端spring启动应用程序 . 一切都按预期工作 . 前端Spring Boot App在Keycloak中配置为域中的客户端(app-ui),用户可以通过keycloak登录,令牌传递成功一切都很棒 . Spring Security正在保护终端,并且正在为 endpoints 尊重角色 .
现在,我正在尝试在混合中添加下游Spring Boot App(Web服务),并且我希望它能够知道登录用户能够保护对它的调用 . 前端Spring Boot App使用Feign Client调用后端Spring Boot App上的REST endpoints ,但后端没有进行任何身份验证/授权 .
我有几个问题我无法搞清楚:
-
如何设置前端Spring Boot App将经过身份验证的用户详细信息传递给后端Spring Boot App(RequestInterceptor / RestTemplate / Feign config / Http Headers)?
-
如何配置后端Spring Boot App以使用从上游Spring Boot App接收的经过身份验证的用户详细信息以及我需要将哪些依赖项添加到后端Spring Boot App以方便(org.keycloak: keycloak-spring-boot-starter和org.springframework.boot:spring-boot-starter-security)?
-
我需要在Keycloak中为后端Spring Boot App配置什么?它应该作为机密/非公共客户(例如app-api)在Keycloak注册吗?
-
在后端Spring Boot App中是否有特定的配置?是否与Keycloak交谈以验证从上游呼叫者收到的经过身份验证的用户详细信息?
我已经看到了 How to integrate Keycloak and Spring Boot
更进一步,以保护任何其他下游服务 . 如果我能解决这个问题,我会发布一个 .
我假设这可以通过后端Spring Boot App上的标准OAuth2配置来完成,但我不确定如何建议实现这种架构 .
这是我正在尝试设置的架构:
1 回答
如何设置前端Spring Boot App以将经过身份验证的用户详细信息传递给后端Spring Boot App(RequestInterceptor / RestTemplate / Feign config / Http Headers)?
您需要在http请求标头中传递bearer-token .
如何配置后端Spring Boot App以使用从上游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中是否需要为后端Spring Boot App配置什么?它应该作为机密/非公共客户(例如app-api)在Keycloak注册吗?
您需要创建一个新客户端,它应该注册为“仅限承载者”
你可以参考这个链接:https://www.keycloak.org/docs/3.2/securing_apps/topics/oidc/java/spring-boot-adapter.html