最近項目需要,即在 網站A 比如 http://a.com 中 使用iframe 內嵌訪問 網站B 比如 http://b.com
可是在測試的時候,發現使用 谷歌瀏覽器或者谷歌瀏覽器內核的瀏覽器 內嵌訪問 網站B的登錄頁面的時候 http://b.com/login 會導致登錄失敗!登錄不成功。
而如果使用其他瀏覽器比如 火狐是可以的。
參考解決方案:
問題原因:chrome80及以上版本調整了cookie的策略不能保持,所以出現了跨域問題
解決方案:
1、使用其他瀏覽器,或者使用低於谷歌80版本的谷歌瀏覽器
2、客戶端解決:如果用戶要使用高於80版本谷歌瀏覽器,需要在自己電腦上的谷歌瀏覽器進行一個設置也可解決,見方法一
3、服務端解決,集成系統及BI系統均需要修改爲https協議(注意:單點登錄回調接口的協議不能改爲https,否則涉及到證書相關驗證,由於BI中並沒有證書,會造成請求接口失敗),見方法二將BI修改爲https協議,集成系統修改爲https需要自行解決
方法一:
1、打開你的谷歌瀏覽器,地址欄輸入:chrome://flags
2、搜索:SameSite by default cookies
3、選擇:disabled
4、重啓瀏覽器
那肯定不能讓 用戶 配置瀏覽器了,也不能讓用戶指定用火狐瀏覽器。
於是就 把 A 和 B網站都加上證書 採用 https 的方式。
其實也就是 瀏覽器爲了安全性,禁用了 iframe 登錄 session 寫入 cookie的功能。
都採用證書 iframe內嵌登錄還是失效
結果發現還是登錄實現了 。 具體可以使用 菜鳥教程來驗證
結果發現 登錄慕課網 雖然發郵件告訴我登錄成功了,其實是在頁面上還是沒有登錄成功的。
iframe 內嵌跨域登錄必須是 證書 + 同域名
也就是 很多百度資料都是說得不清楚,或者過時了的。
經過驗證也就是 iframe 內嵌登錄必須是 A網站和B網站都 加上 https 證書,且 域名是一樣纔可以的。
比如: 即在 網站A 比如 https://a.com/a 中 使用iframe 內嵌訪問 網站B 比如 https://b.com/b 會導致 網站B登錄失效
如果把 網站B域名改成 https://a.com/b 即在 網站A 比如 https://a.com/a 中 使用iframe 內嵌訪問 網站B 比如 https://a.com/b 是可以的