一、概述
1
版本。
報表伺服器版本 | JAR 包版本 | HTTPS_SameSite_跨域插件 |
---|---|---|
10.0 | 2019-01-31 | V3.0 |
2
問題描述。
谷歌瀏覽器 80 版本及以上單點登入失敗,跳轉到登入頁,其他瀏覽器正常。
3
原因分析。
由於 cookie 問題導緻單點失敗。
Chrome 最新瀏覽器最新版本(80.0)及以上修改了安全策略,預設 SameSite 策略不允許 cookie 跨站傳送,因此單點登入會失敗。
4
解決思路。
通用解決方案 | 需關閉谷歌瀏覽器的【SameSite by default cookies】選項,重啓瀏覽器 |
---|---|
http/https方案 | http 存取:統一主域名 https 存取:需要單點到的工程安裝 HTTPS_SameSite_跨域插件,重啓工程 |
二、跨站簡介
Chrome 最新瀏覽器最新版本(80.0)及以上版本,不允許 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】,那麼它倆就是同一個地點的。
注:頂層領域名稱列表可參見:頂層領域名稱列表。
三、通用解決方案
注1:這一方案同樣適用於其他谷歌核心瀏覽器,如新 edge(存取edge://flags/)、360 安全瀏覽器(存取se://flags/)等,但不適用於 91 及以上版本的谷歌核心瀏覽器。注2:本章提供方案是透過修改谷歌的設定解決的,每臺存取的電腦都需要修改谷歌的設定,使用體驗差,不太推薦;推薦參考本文第四章方案。
在谷歌瀏覽器位址欄中輸入:【chrome://flags/】,然後在搜尋框輸入【SameSite】搜尋並找到【SameSite by default cookies】選項,右側按鈕選擇【Disabled】,【重啓谷歌瀏覽器】即可。如下圖所示。
四、http/https方案
1
http 存取。
方案一:統一主域名
參見本文第二章跨站說明。
保證兩個工程的頂層領域名稱、次頂層領域名稱相同,比如 a.b.com 和 c.b.com,【.com】頂級,【b】是次頂級。
舉例:bbs.fanruan.com、help.fanruan.com,頂層領域名稱均為 .com,次級域名均為 fanruan,這樣的兩個工程則不會出現此問題。
方案二:升級為 https
升級為 https 後,參考本文 第四章第2節內容。
2
https 存取。
安裝插件:插件下載請點選:HTTPS_SameSite_跨域插件;伺服器安裝插件方法請參見:A11-18 伺服器-插件管理
具體步驟:設定跨域單點登入後,【需要單點到的工程】安裝【HTTPS_SameSite_跨域插件】後,重啓工程,即可實現跨站單點登入。
五、注意事項
谷歌最新的 91 版本無法手動關閉 samesite ,samesite 屬性全都會預設開啓,單點全都會失敗,但是【HTTPS_SameSite_跨域插件】正常生效。