首页 > 解决方案 > Keyclock 与客户端 ID 共享相同的会话

问题描述

我不是这方面的专家。

在同一领域的 Keycloak 上,我们定义了两个客户端 ID。

我的客户端 ID 配置了 OpenID 连接和授权代码流。

像这样,可以通过这些客户端使用其凭据对用户进行身份验证。

我有个问题。我的一个用户在这两个不同的客户端 ID 之间共享相同的 Keycloak 会话。事实上,当用户登录客户端 A 时,他已从客户端 B 中注销。同样,当他登录客户端 B 时,他已从客户端 A 中注销。

为什么可以共享同一个 Keycloak 会话?以及如何确保有两个不同的 Keycloak 会话。

更新:我注意到,当用户通过客户端 A 或客户端 B 登录时,他使用相同的浏览器。如果他通过客户端 A 登录,则无需通过客户端 B 输入其登录名/密码。结果是有一个 Keycloak 会话。(如果用户使用每个客户端的不同浏览器,则客户端有一个 keycloak 会话)。是否可以通过客户端 ID 强制执行一个 keycloak 会话?

标签: oauth-2.0keycloakopenid-connect

解决方案


你说的是几乎所有实现OIDC的AM软件中的一个基本功能,没有登录clientA这回事,用户总是登录IDP,即Keycloak。

默认情况下,客户端没有会话,keycloak 有,并且客户端在其 OIDC 流程中使用 keycloak 会话。例如,如果您已经通过 keycloak 的身份验证,并且您尝试使用 ClientA 或 ClientB 进行 OIDC 流,则不会提示您输入用户名/密码,keycloak 将使用现有会话。

因此,如果您想为同一用户创建不同的会话,则必须创建自己的会话,例如,如果您的客户端使用 apache,则可以使用 apache oidc 模块创建本地会话(这将是您的 ClientA 会话) ,至于 keycloak 会话,您不能有两个会话,但您可以为两个客户端设置一个 keycloak 会话,为每个客户端设置两个 apache 会话。


推荐阅读