两个微服务之间的通信——keycloak客户端

Posted

技术标签:

【中文标题】两个微服务之间的通信——keycloak客户端【英文标题】:Communication between two micro services - keycloak clients 【发布时间】:2019-01-20 22:50:11 【问题描述】:

我有两个服务在同一个领域注册为两个 keycloak 客户端。 在 keycloak 客户端设置中,两个客户端的访问类型都设置为 public。

当我们尝试通过 Keycloak 登录时,这两个服务都可以正常工作。

登录到 first(service-1) 后,用户执行了一些操作,为此我需要对 (service-2) 进行 REST 调用。 现在,如果我尝试从一个服务到另一个服务进行 REST 调用,它会重定向到 html 并返回一些 HTML 响应而不是实际响应。

我可以通过什么方式在这两个服务之间进行调用。

【问题讨论】:

【参考方案1】:

要与受 keycloak 保护的 api 通信,您需要提供授权。为此,您需要做的就是在授权标头中传递访问令牌。

要获取此令牌,您可以进行登录调用,获取访问令牌并将其传递,或者您可以使用传递的令牌来访问第一个服务本身。

【讨论】:

谢谢。对于第一个服务,我们通过登录页面登录。我们还能从中获得访问令牌吗? 是的,您仍然可以获得访问令牌。我不确定,您可能需要为此查看文档,但您可以获得令牌。如果您可以让我了解更多有关前端的信息,我可能会为您提供帮助。【参考方案2】:

不,这还不可能,因为这个问题https://issues.jboss.org/plugins/servlet/mobile#issue/KEYCLOAK-6073。 总之,除非在两种情况下都使用相同的 keycloak URL,否则您不能在支持的调用中使用登录网页生成的令牌。

【讨论】:

以上是关于两个微服务之间的通信——keycloak客户端的主要内容,如果未能解决你的问题,请参考以下文章

何时在 Keycloak 中使用领域角色?

微服务之间的通信——请求数据

REST 微服务之间的通信:延迟

精通springcloud:微服务之间的通信,使用Ribbon执行负载均衡

使用 Keycloak 进行微服务身份验证

精通springcloud:微服务之间的通信,继承支持