keycloak~關于iframe方式(shi)對接keyclock的注意事項
keycloak作為統一的(de)(de)認(ren)證(zheng)中(zhong)心,提供了單點登錄的(de)(de)能力,一般(ban)可以通(tong)過超鏈的(de)(de)方(fang)式(shi)打開keycloak登錄頁,這(zhe)對(dui)于不同域名(ming)來說,是沒有任(ren)何問題的(de)(de);第二(er)種對(dui)接方(fang)式(shi)是通(tong)過iframe方(fang)式(shi),當你的(de)(de)網站與keycloak不同域名(ming)時,在iframe方(fang)式(shi)對(dui)接時,會有cookie Partitioned向的(de)(de)分(fen)區(qu)限(xian)制。
一 Partitioned Cookie
Partitioned Cookie 的作用
Partitioned Cookie 是瀏覽器為(wei)了平衡功能與隱私而引入的新機制:
- 分區存儲:第三方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):
- X-Frame-Options:
三 Partitioned對iframe對接keycloak的影響
新(xin)版瀏覽器才有Partitioned這個特性
- a.com域名對接keycloak.com,在a.com域名登錄
- b.com域名也對接keycloak,b.com域名無法共享a.com域名的登錄狀態,因為他們按著域名進行了分區
- cookie中auth_session_id的Partitioned(Partition Key)存儲為頂級域名,如
//zzl.com,//lind.com,它對二級域名是共享的

建議
- 盡量不采用iframe的方式對接統一認證
- 跨域對接keycloak不能使用iframe方式