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