我可以自己设置KEYCLOAK_IDENTITY cookie吗

时间:2019-11-13 12:47:38

标签: oauth oauth-2.0 single-sign-on openid-connect keycloak

我将KeyCloak与OpenID Connect一起使用。

我在与KeyCloak相同的域上有一个应用程序。该应用程序具有一个将授权码作为参数的终结点,并在响应中设置“ KEYCLOAK_IDENTITY” cookie以启用SSO。

它可以工作,但是确定可以吗?

编辑:我的问题是关于cookie的。我解释了“为什么”只是为了提供一些背景信息。

编辑2 :对于想使用此解决方案的人,我真的很担心密钥斗篷社区...即使有100赏金,我的问题也没有答案。

为什么要这么做:

我需要在外部网站(拥有自己的认证提供者,称为“站点A”)与Keycloak处理的应用程序世界之间建立SSO(我们将其中一个称为“站点K”)。 / p>

作为站点A的经过身份验证的用户,如果我想导航到站点K而不登录(即使用SSO),则需要登录KeyCloak(授权代码流将完成其工作)。

但是,要登录KeyCloak,我需要:

  1. 获取授权码
  2. 将此代码交换为令牌,令牌将添加到KeyCloak域的Cookie(KEYCLOAK_IDENTITY)

1。OIDC有点棘手,但有可能。

OIDC无法使用2.:KeyCloak中没有端点可以接受授权代码并设置cookie,而无需在主体中返回令牌。

因此,我的解决方案是在与KeyCloak相同的域上添加一个网关,该网关将从KeyCloak获取令牌并将其添加到KEYCLOAK_IDENTITY cookie中。这很棘手,但它确实起作用。我的问题是:安全吗?

如果不清楚,请随时提问!

2 个答案:

答案 0 :(得分:1)

如果它具有自己的身份数据库,则应考虑通过User Storage Provider implementation(USP)将此数据库集成到站点K的密钥库中。这样,您的两个站点都将使用单个Keycloak服务器进行身份验证。

如果来自站点A的身份数据库具有在站点B的Keycloak中重复的用户帐户,则可能会出现问题,如果是这样,则您应该考虑合并(例如,首选来自Keycloak的现有用户-这是来自Keycloak身份的用户的默认行为数据库与从用户存储提供者实施中提取的用户发生冲突。您还可以为USP创建单独的领域,并为您的应用程序使用多租户。

答案 1 :(得分:0)

您可以使用用户联合,以便站点A的任何用户也是密钥隐藏用户,但也有一些站点A未知的密钥隐藏用户。如果标准用户联合(LDAP,Kerberos)不可用于您,您可以添加自定义用户联盟SPI