iframe內嵌第三方帶登錄頁的跨域登錄失效問題

最近項目需要,即在 網站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      是可以的

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章