0

我有 2 个不同的应用程序:比如 Application1 和 Application2。

我已经将 Application2 与 keycloak 集成在一起,并且可以使用 Keycloak 的登录页面登录到该应用程序。

现在我想要的是,如果我登录到我的 Application1(没有 keycloak),我应该能够调用 keycloak 的一些 API 来登录到 application2(而不呈现 keycloak 的登录页面)。

可行吗?如果是,如何?

任何帮助将不胜感激。

谢谢

4

1 回答 1

0

TLDR;不,这是不可能的。

您可以通过 API 登录 Keycloak 并为用户获取访问令牌,但它只能用于代表用户调用 Application2 上的 API。因此,如果您不打算显示 Application2 UI 并且用户将在 Application1 中看到 Application2 API 调用的结果,这将很有用。

原因是 Keycloak 与其他 SSO 解决方案一样,使用 cookie 来跟踪 SSO 会话。因此,如果您的用户登录到 Application2,他/她将在其浏览器上拥有 Keycloak SSO cookie。因此,当用户第一次访问 Application1(如果 Application1 与 Keycloak 集成)因为它没有会话时,他/她会被重定向到 Keycloak 登录页面,Keycloak 会注意到 SSO cookie 在那里并且是有效的,所以将用户视为登录用户,不会呈现任何登录 UI,只是将其重定向回 Application1。

您无法通过 API 访问该 Keycloak cookie,即使可以,您也无法在用户的浏览器上为 Keycloak 域设置它。

于 2020-10-28T07:28:41.347 回答