在此只是記錄一下自己在嘗試SSO跨域實現的過程中學到的幾種跨域方案,不包含任何例子和具體的實現方法。
最近在嘗試SSO的跨域,看了好多資料,然後自己記錄了一下可以實現的方法:
①跳轉所有站點設定cookie
除了①,其餘的都是以一個主站點將 ticket 儲存到該站點的域下,其餘的域通過不同的方法來獲取主域下的cookie
②主域(頁面重定向):
優點:
1、中間域站點可以設定為 https ,保障傳輸安全性
缺點:
1、有重定向動作,使用者體驗不好
2、如果用 https ,接入門檻高
③JSONP:
優點:
1、輕量級,ajax封裝,使用方便,Json 格式通用
缺點:
1、callback 引數注入,存在XSS漏洞
2、資源訪問未受限制 (可用refer作授權設定,但效果很有限)
3、只能 Get 請求
④iframe + window.name
優點:
缺點:
1、傳值只能是字串的形式
2、傳值有大小限制,一般最大是2M
⑤iframe + document.domain
優點:
缺點:
1、兩個域必須在同一基礎域
4月24日,與Alex討論後,從Alex那裡學到了兩個方法
⑥模擬表單post提交
優點:
1、表單post提交設定cookie不受同源策略限制
缺點:
1、接收方的介面設定了cookie後,返回的是302,必然會把提交方的頁面重定向,而且這個重定向的地址也是由接收方返回的時候一併返回的。意思就是,提交方只能控制post動作,後續的動作都是由接收方來操縱。
⑦ nginx 反向代理(Alex比較傾向的方法,未驗證)
方法:
服務端提供介面,讀取和設定本域的cookie
客戶端訪問服務端的介面通過 nginx 的反向代理訪問(如 www.clientA.com/server/setcookie.do)。個人理解為,這是客戶端相當於訪問自身站點的一個虛擬目錄,然後 nginx 把這個請求轉發到了 服務端。
⑧ CORS
2017-04-25 18:03 建立
先簡單記錄下