我将 KeyCloak 与 OpenID Connect 一起使用。
我在 KeyCloak 的同一个域上有一个应用程序。此应用程序有一个端点,它将授权代码作为参数,并在响应中设置 'KEYCLOAK_IDENTITY' cookie 以启用 SSO。
它有效,但这样做安全吗?
编辑 : 我的问题是关于 cookies 的。我解释“为什么”只是为了提供一些上下文。
编辑 2 :对于想要使用此解决方案的人,我真的很关心 keycloak 社区......即使有 100 的赏金,也没有回答我的问题。
我为什么要这样做:
我需要在外部网站(使用它自己的身份验证提供商,我们称之为“站点 A”)和由 Keycloak 处理的应用程序世界(我们称之为“站点 K”)之间设置 SSO。
作为站点 A 的经过身份验证的用户,如果我想在不登录的情况下导航到站点 K(即使用 SSO),我需要登录 KeyCloak(授权代码流将完成它的工作)。
但是,为了登录 KeyCloak,我需要:
1. OIDC 很棘手,但这是可能的。
2. 使用 OIDC 是不可能的:KeyCloak 中没有端点可以获取授权码并设置 cookie,而无需在正文中返回 token 。
所以,我的解决方案是添加一个网关,在与 KeyCloak 相同的域上,它将从 KeyCloak 获取 token 并将其添加到 KEYCLOAK_IDENTITY cookie ......这很棘手,但它确实有效。我的问题是:它安全吗?
如果不清楚:请随时提问!
最佳答案
如果它有自己的身份数据库,您应该考虑通过 User Storage Provider implementation 将此数据库集成到站点 K 的 keycloak 中。 (USP)。这样,您的两个站点都将使用单个 Keycloak 服务器进行身份验证。
如果来自站点 A 的身份 DB 的用户帐户在站点 B 的 Keycloak 中重复,则可能会出现问题,如果是这样,您应该考虑合并(或者例如更喜欢来自 Keycloak 的现有用户 - 这是来自 Keycloak 身份 DB 的用户与用户从用户存储提供程序实现中提取)。您还可以为 USP 创建单独的领域,并为您的应用程序使用 Multi-Tenancy 。
关于oauth - 我可以自己设置 KEYCLOAK_IDENTITY cookie吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837499/