1. 概述
1.1 版本
報表伺服器版本 | 功能變動 |
---|---|
11.0 | |
11.0.4 | 內建HTTPS_SameSite_跨域策略,運用見本文第 4 節 |
1.2 問題描述
谷歌瀏覽器 80.0 及以上版本、火狐瀏覽器 96.0 及以上版本、360極速瀏覽器,單點登入失敗,跳轉到登入頁,其他瀏覽器正常。
1.3 原因分析
由於 cookie 問題導致單點失敗。
谷歌瀏覽器 80.0 及以上版本、火狐瀏覽器 96.0 及以上版本均修改了安全策略,預設 SameSite 策略不允許 cookie 跨站傳送,因此單點登入會失敗。
360極速瀏覽器使用了谷歌瀏覽器核心,也有可能出現這個情況。
1.4 解決思路
谷歌通用解決方案 | 需關閉谷歌瀏覽器的「SameSite by default cookies」選項,重啟瀏覽器 |
---|---|
http/https方案 | http 存取:統一主域名 https 存取:需要單點到的工程安裝 HTTPS_SameSite_跨域插件,重啟工程 |
2. 跨站簡介
谷歌瀏覽器 80.0 及以上版本、火狐瀏覽器 96.0 及以上版本、360極速瀏覽器,不允許 cookie 跨站傳送,會導致單點登入失敗。
跨站的判斷依據:
跨站是用 Public Suffix List 域名後綴列表 來判斷的。
兩個 URL ,頂層領域名稱和次頂層領域名稱內容(後面用 public suffix+1 指代)相同,為同站:
頂層領域名稱:從 Public Suffix List 域名後綴列表中匹配的最長後綴長度。
次頂層領域名稱:頂層領域名稱前面的欄位。
注:頂層領域名稱列表可參見:頂層領域名稱列表
範例:
比如 www.sina.com.cn 的 public suffix+1 是 sina.com.cn,www.sohu.com.cn 的 public suffix+1 是 sohu.com.cn, 兩者不一樣,所以不屬於同一個地點;再比如 nanzhuang.taobao.com 的 public suffix+1 是 taobao.com,nvzhuang.taobao.com 的 public suffix+1 也是 taobao.com,那麼它倆就是同一個地點的。
3. 谷歌通用解決方案
注1:這一方案同樣適用於其他谷歌核心瀏覽器,如新 edge(存取edge://flags/)、360 安全瀏覽器(存取se://flags/)等,但不適用於 91 及以上版本的谷歌核心瀏覽器。
注2:本章提供方案是透過修改谷歌的設定解決的,每臺存取的電腦都需要修改谷歌的設定,使用體驗差,不太推薦;推薦參考本文第四章方案。
在谷歌瀏覽器位址欄中輸入:chrome://flags/,然後在搜尋框輸入「SameSite」搜尋並找到
「SameSite by default cookies」選項,右側按鈕選擇「Disabled」,重啟谷歌瀏覽器即可。如下圖所示:
4. http/https方案
谷歌瀏覽器、火狐瀏覽器、360極速瀏覽器均可透過此方案解決。
方案一:統一主域名
參見本文第二章跨站說明。
保證兩個工程的頂層領域名稱、次頂層領域名稱相同,比如 a.b.com 和 c.b.com,「.com」頂級,「b」是次頂級。
舉例:bbs.fanruan.com、help.fanruan.com,頂層領域名稱均為 .com,次級域名均為 fanruan,這樣的兩個工程則不會出現此問題。
方案二:升級為 https
升級為 https ,設定跨域單點登入後,工程現在是內建HTTPS_SameSite_跨域策略的,可直接實現跨站單點登入。
注:使用內建HTTPS_SameSite_跨域策略,必須將工程升級到 11.0.4 版本。
5. 注意事項
谷歌最新的 91 版本無法手動關閉 samesite ,samesite 屬性全都會預設開啟,單點全都會失敗,但是「HTTPS_SameSite_跨域插件」正常生效。