Keycloak:使用新的 Chrome SameSite/Secure cookie 强制执行的令牌请求中缺少会话 cookie
Posted
技术标签:
【中文标题】Keycloak:使用新的 Chrome SameSite/Secure cookie 强制执行的令牌请求中缺少会话 cookie【英文标题】:Keycloak: Session cookies are missing within the token request with the new Chrome SameSite/Secure cookie enforcement 【发布时间】:2020-06-22 14:53:07 【问题描述】:最近我使用 Keycloak 的应用程序在验证后停止处理 400 令牌请求。
到目前为止,我发现在令牌请求中,Keycloak cookie(AUTH_SESSION_ID、KEYCLOAK_IDENTITY、KEYCLOAK_SESSION)未在请求标头中发送,导致令牌请求失败并且应用程序出现会话错误。
通过深入挖掘,我发现 Chrome 现在会阻止未设置 SameSite 属性的 cookie,keycloak cookie 就是这种情况,这就是为什么在身份验证后它们永远不会在令牌获取请求中解析的原因。
我得到的错误:-
https://blog.chromium.org/2019/10/developers-get-ready-for-new.html
https://adzerk.com/blog/chrome-samesite/
这非常严重,因为它会阻止受 Keycloak 库保护的应用程序能够与 keycloak 服务器通信。
更新:使用新的 google chrome cookie SameSite 属性,任何使用未正确设置 SameSite 属性的 cookie 的第三方库,cookie 将被忽略。 https://blog.chromium.org/2019/10/developers-get-ready-for-new.html
https://www.chromium.org/updates/same-site
【问题讨论】:
这个问题能解决你的问题吗? issues.redhat.com/browse/KEYCLOAK-12125 @rowan_m 是的,刚刚发现了这一点。但我依赖的是红帽版本,所以需要等待他们的更新或尝试解决方法.. 我将留下这篇文章,因为它可能对那些将通过新的 google chrome 更新推出体验这一点的人有所帮助。 chromium.org/updates/same-site 【参考方案1】:对于那些在更新库之前正在寻找短期解决方案的人。
您可以在 Chrome 中执行以下操作:-
转到 chrome://flags/ 搜索“同一站点” 禁用“SameSite 默认 cookie”和“没有 SameSite 的 Cookie 必须是安全的”标志。 重新启动。【讨论】:
【参考方案2】:如果您在使用keycloak-js 适配器时遇到此问题。
那么这个问题的原因:
默认情况下,javascript 适配器会创建一个隐藏的 iframe,用于检测是否发生了单点注销。这不需要任何网络流量,而是通过查看特殊状态 cookie 来检索状态。
解决方法(不是修复):
可以通过在传递给 init 方法的选项中设置 checkLoginIframe: false 来禁用此功能。
例如,
keycloak.init( onLoad: '需要登录', checkLoginIframe: 假 )
【讨论】:
这是正确的,但请注意,iframe 的使用对于许多情况非常有用,例如检测从第二个选项卡注销等,除非您通过 websocket 调用额外控制您的应用程序。你需要更新你的 keycloak 服务器来解决这个问题,因为他们已经发布了一个版本来支持它。 同意。这就是为什么我提到它作为解决方法。当然,这必须在后端修复以传递 SameSite 属性。 查看发行说明,我认为这已在 v8.0.2 中得到解决。【参考方案3】:在 Chrome 91+ 中,flags 中的设置消失了,但可以通过命令行访问,在 94 中这些设置无法访问。
可以同时使用Firefox或Safari。
【讨论】:
以上是关于Keycloak:使用新的 Chrome SameSite/Secure cookie 强制执行的令牌请求中缺少会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Keycloak 会不断重新部署相同的 .jar 文件?
带有 keycloak 的 Spring Cloud 微服务
JBoss/Keycloak 服务器:更新自签名服务器 Ssl 证书