偷懶小工具 - SSO單點登錄通用類(可跨域)
寫在前面的話
上次發(fā)布過一篇同樣標題的文章。但是因為跨域方面做得不太理想。我進行了修改,并重新分享給大家。
如果這篇文章對您有所幫助,請您點擊一下推薦。以便有動力分享出更多的“偷懶小工具”
目的
目的很明確,就是搭建單點登錄的幫助類,并且是一貫的極簡風格(調用方法保持5行以內)。
并且與其他類庫,關聯(lián)性降低。所以,不使用WebAPI或者WebService等。
思路
因為上次有朋友說,光看見一堆代碼,看不見具體思路。所以,這次分享,我把思路先寫出來。
懶得看實現(xiàn)代碼的朋友,可直接查看“思路”這個子標題。
同時如果有好的想法,請修改后在github上推給我。Talk is cheap,Show me the code
思路
同域
同域需要考慮的問題比較少。只需要考慮,MVC和WebForm的Request如何獲取即可。
實現(xiàn)流程圖如下
1. 因為是使用同樣的Cookie所以名稱和加密方式必須一致。
2. 需要設置登錄成功后,回跳的網(wǎng)址。因為Forms身份認證的ReturnURL不能獲得請求原網(wǎng)址。
3. 剩下的就如圖所示了。不明白的可以追問,我就不細說了。
跨域
跨域除了需要考慮同域的問題外,還需要考慮狀態(tài)共享。因為同源策略問題,故此使用JSONP。
1. 因為不是Cookie共享,所以只需要設置相同的加密方法即可。
2. 需要在認證網(wǎng)站,添加可登錄的其他網(wǎng)站集合,使用逗號分隔。
3. 需要在其他網(wǎng)站,創(chuàng)建一個Login頁面并調用幫助類的驗證方法。配置認證網(wǎng)站URL。
4. 當認證網(wǎng)站登錄成功后,會根據(jù)配置的其他網(wǎng)站,給他們發(fā)送JSONP請求,讓他們自動登錄。
5. 注銷同理。JSONP請求方式,可參考這篇文章:jsonp詳解。使用的就是添加js標簽的方式。
至此,思路說明結束。不明白的可以追問。