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.comCookie
- 因此无法实现单点登录共享

二 iframe安全相关
- CSP(Content Security Policy):https://www.w3.org/TR/CSP/
- X-Frame-Options:https://www.rfc-editor.org/rfc/rfc7034
三 Partitioned对iframe对接keycloak的影响
新版浏览器才有Partitioned这个特性
- https://github.com/privacycg/CHIPS
- https://developer.mozilla.org/zh-CN/docs/Web/Privacy/Guides/Privacy_sandbox/Partitioned_cookies
- a.com域名对接keycloak.com,在a.com域名登录
- b.com域名也对接keycloak,b.com域名无法共享a.com域名的登录状态,因为他们按着域名进行了分区
- cookie中auth_session_id的Partitioned(Partition Key)存储为顶级域名,如http://zzl.com,http://lind.com,它对二级域名是共享的

建议
- 尽量不采用iframe的方式对接统一认证
- 跨域对接keycloak不能使用iframe方式