我可以自己设置 KEYCLOAK_IDENTITY cookie
Posted
技术标签:
【中文标题】我可以自己设置 KEYCLOAK_IDENTITY cookie【英文标题】:Can I set KEYCLOAK_IDENTITY cookie by myself 【发布时间】:2020-03-09 06:34:13 【问题描述】:我将 KeyCloak 与 OpenID Connect 一起使用。
我在与 KeyCloak 相同的域上有一个应用程序。此应用程序有一个端点,该端点将授权代码作为参数,并在响应中设置“KEYCLOAK_IDENTITY”cookie 以启用 SSO。
它有效,但这样做安全吗?
EDIT:我的问题是关于 cookie 的。我解释“为什么”只是为了提供一些背景信息。
编辑 2:对于想要使用此解决方案的人,我真的很关心 keycloak 社区......即使有 100 的赏金,我的问题也没有答案。
我为什么要这样做:
我需要在外部网站(使用它自己的身份验证提供程序,我们称之为“站点 A”)和 Keycloak 处理的应用程序世界(我们将其中一个称为“站点 K”)之间设置 SSO。
作为站点 A 的经过身份验证的用户,如果我想在不登录的情况下导航到站点 K(即使用 SSO),我需要在 KeyCloak 上登录(授权代码流将完成它的工作)。
但是,为了登录 KeyCloak,我需要:
-
获取授权码
将此代码交换为将添加到 KeyCloak 域的 cookie (KEYCLOAK_IDENTITY) 的令牌
1. 使用 OIDC 很棘手,但这是可能的。
2. 使用 OIDC 是不可能的:KeyCloak 中没有端点可以获取授权码并设置 cookie 而无需在正文中返回令牌。
所以,我的解决方案是在与 KeyCloak 相同的域上添加一个网关,该网关将从 KeyCloak 获取令牌并将其添加到 KEYCLOAK_IDENTITY cookie...这很棘手,但确实有效。我的问题是:它安全吗?
如果不清楚:请随时提问!
【问题讨论】:
为什么不直接将站点 A 与站点 K 的 Keycloak 集成?站点 A 是否有自己的用户身份数据库? 确实有自己的数据库 【参考方案1】:如果它有自己的身份数据库,您应该考虑通过User Storage Provider implementation (USP) 将此数据库集成到站点 K 的 keycloak。这样,您的两个站点都将使用单个 Keycloak 服务器进行身份验证。
如果来自站点 A 的身份数据库具有在站点 B 的 Keycloak 中重复的用户帐户,则可能会出现问题,如果是这样,您应该考虑合并(或者例如更喜欢来自 Keycloak 的现有用户 - 这是来自 Keycloak 身份的用户时的默认行为数据库与从用户存储提供程序实现中提取的用户发生冲突)。您还可以为 USP 创建单独的领域并为您的应用程序使用多租户。
【讨论】:
您的意思是使用 Keycloak 的登录页面访问站点 A?很遗憾,我做不到。 如果您必须在站点 A 和站点 B 中使用不同的登录页面外观,您可以为站点 A 的用户使用单独的域(使用自定义登录主题)或使用相同的域但要求 Keycloak 使用单独的域来自站点 A 的应用程序的登录主题(您也将开发它们)。Keycloak 的最新版本支持此功能。 这不仅仅是“外观”。我不能将 Keycloak 暴露给站点 A:这是我的问题 ^^ 这就是我想知道“cookie 解决方案”的原因 请注意,在您当前的解决方案中,无论如何都会暴露 Keycloak(用户将被应用程序重定向到它以通过身份验证,即使他们实际上不会看到登录页面)。我也怀疑你是否能够从第三方应用程序设置 KEYCLOAK_IDENTITY cookie,到目前为止,这个 cookie 是 http-only 并且应该属于 keycloak 服务器域。尝试检查以下 SO 问题:***.com/questions/58931035/… 设置 cookie 应该不是问题,“代理应用程序”将与 keycloak 在同一个域中。正如问题中所说:它有效,但我想知道它是否安全【参考方案2】:您可以使用用户联合,这样站点 A 的任何用户也是 keycloak 用户,但也有站点 A 不知道的 keycloak 用户。如果标准用户联合(LDAP、Kerberos)不能用于你,你可以添加一个自定义用户联合 SPI
【讨论】:
谢谢,但我的问题是关于 KEYCLOAK_IDENTITY cookie。我曾经想过这个解决方案,但我的情况是不可能的以上是关于我可以自己设置 KEYCLOAK_IDENTITY cookie的主要内容,如果未能解决你的问题,请参考以下文章
Keycloak 桌面 java 适配器删除 KEYCLOAK_IDENTITY cookie
未设置 CORS 标头 - 我可以请求图像 url,然后将其返回给自己吗?