通过 REST 与 Keycloak 保护的后端进行后端到后端通信

Posted

技术标签:

【中文标题】通过 REST 与 Keycloak 保护的后端进行后端到后端通信【英文标题】:Backend to backend communication through REST with Keycloak protected backends 【发布时间】:2017-03-18 00:25:03 【问题描述】:

我有两个网络应用程序。每个都有前端(AngularJS)和后端(Java)。每个前端都有自己的公共访问类型配置 keycloak.json 文件。每个后端都有自己的仅承载访问类型配置 keycloak.json 文件。每个前端应用程序都可以与自己的后端一起正常工作。我的任务是互相调用 REST(后端到后端)。我怎么能做到这一点?因为在每个后端 REST 服务都通过检查令牌有效性来保护。

【问题讨论】:

好问题!我想问这种问题比较合适的地方是官方Keycloak user mailing list。 【参考方案1】:

如果所有这些后端服务都由 keycloak 保护,请查看 Spring keycloak 适配器中 RestTemplate 的 KeycloakRestTemplate 扩展。 KeycloakRestTemplate 作为 keycloak-spring-security-adapter jar 依赖项的一部分导入。

基本上,它使用 KeycloakClientRequestFactory 并在内部将 Authorization 标头(用于当前经过身份验证的主体)添加到服务调用的所有请求中。

https://github.com/keycloak/keycloak/blob/master/adapters/oidc/spring-security/src/main/java/org/keycloak/adapters/springsecurity/client/KeycloakRestTemplate.java

【讨论】:

但是如果我不使用 Spring?除了做什么? @Eldar,当然,您不必使用弹簧。您可以从 UI 到后端的原始请求中获取访问令牌,并将其简单地注入到另一个后端服务的传出请求的标头中。如果不是 spring RestTemplate,你是如何进行服务调用的? 我试过这个没有运气。第二个后端抛出异常“令牌发行者不同”。两个项目有不同的子域名:backend1.project.com 和 backend2.project.com 两个项目是否使用相同的密钥斗篷?令牌颁发者是一个处理身份验证流程的密钥斗篷领域。应用程序只能在同一领域内对其他后端使用外部请求(除非您配置了多租户)

以上是关于通过 REST 与 Keycloak 保护的后端进行后端到后端通信的主要内容,如果未能解决你的问题,请参考以下文章

带有 NGINX 代理服务器的 Keycloak 未验证 rest api

Keycloak 公开与机密客户

带有 keycloak 设置的 Spring Security (HttpSecurity)

如何使用 Keycloak 保护前端和 REST API

Swagger 中的 Keycloak 集成

将 Keycloak 不记名令牌传递给表达后端?