keycloak~关于iframe方式对接keyclock的注意事项


keycloak作为统一的认证中心,提供了单点登录的能力,一般可以通过超链的方式打开keycloak登录页,这对于不同域名来说,是没有任何问题的;第二种对接方式是通过iframe方式,当你的网站与keycloak不同域名时,在iframe方式对接时,会有cookie Partitioned向的分区限制。

一 Partitioned Cookie

Partitioned Cookie 的作用

Partitioned Cookie 是浏览器为了平衡功能与隐私而引入的新机制:

  • 分区存储:第三方Cookie不再全局共享,而是按”第一方网站+第三方域名”分区存储
  • 隔离保护:防止跨站跟踪,同时保留必要的跨站功能
  • 特定场景可用:只有在特定第一方网站上下文中才能访问对应的第三方Cookie

在你的场景中的影响

a.com → kc.com (设置分区Cookie)
b.com → kc.com (无法读取a.com分区下的Cookie)

当前状态

  • 用户在 a.com 登录,kc.com 的Cookie存储在 a.com 分区下
  • 用户访问 b.com 时,无法读取 a.com 分区下的 kc.com Cookie
  • 因此无法实现单点登录共享

二 iframe安全相关

三 Partitioned对iframe对接keycloak的影响

新版浏览器才有Partitioned这个特性

  1. a.com域名对接keycloak.com,在a.com域名登录
  2. b.com域名也对接keycloak,b.com域名无法共享a.com域名的登录状态,因为他们按着域名进行了分区
  3. cookie中auth_session_id的Partitioned(Partition Key)存储为顶级域名,如http://zzl.com,http://lind.com,它对二级域名是共享的

建议

  1. 尽量不采用iframe的方式对接统一认证
  2. 跨域对接keycloak不能使用iframe方式

跨域iframe如果支持,需要修改浏览器配置