Keycloak:使用新的 Chrome SameSite/Secure cookie 强制执行时,令牌请求中缺少会话 cookie

2024-05-14

最近,我使用 Keycloak 的应用程序在身份验证后停止处理 400 令牌请求。

到目前为止,我发现在令牌请求中,Keycloak cookie(AUTH_SESSION_ID、KEYCLOAK_IDENTITY、KEYCLOAK_SESSION)未在请求标头中发送,导致令牌请求失败,并且应用程序收到会话错误。

通过深入挖掘,我发现 Chrome 现在会阻止没有设置 SameSite 属性的 cookie,这就是 keycloak cookie 的情况,这就是为什么它们在身份验证后永远不会在令牌获取请求中进行解析的原因。

我得到的错误:-

enter image description here https://blog.chromium.org/2019/10/developers-get-ready-for-new.html https://blog.chromium.org/2019/10/developers-get-ready-for-new.html

https://adzerk.com/blog/chrome-samesite/ https://adzerk.com/blog/chrome-samesite/

这是非常严重的,因为它阻止由 Keycloak 库保护的应用程序能够与 keycloak 服务器通信。

Update:使用新的 google chrome cookie SameSite 属性,任何使用未正确设置 SameSite 属性的 cookie 的第三方库,该 cookie 将被忽略。https://blog.chromium.org/2019/10/developers-get-ready-for-new.html https://blog.chromium.org/2019/10/developers-get-ready-for-new.html

https://www.chromium.org/updates/same-site https://www.chromium.org/updates/same-site


如果您在使用时遇到此问题keycloak-js https://github.com/keycloak/keycloak-documentation/blob/master/securing_apps/topics/oidc/javascript-adapter.adoc适配器。

那么这个问题的原因是:

默认情况下,JavaScript 适配器会创建一个隐藏的 iframe,用于检测是否发生单点注销。这不需要任何网络流量,而是通过查看特殊状态 cookie 来检索状态。

解决方法(不是修复):

可以通过在传递给 init 方法的选项中设置 checkLoginIframe: false 来禁用此功能。

eg.,

密钥斗篷.init({ onLoad: '需要登录', 检查登录Iframe:假 })

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keycloak:使用新的 Chrome SameSite/Secure cookie 强制执行时,令牌请求中缺少会话 cookie 的相关文章

随机推荐