在此只是記錄一下自己在嘗試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  建立

  先簡單記錄下