偷懶小工具 - SSO單點(diǎn)登錄通用類(可跨域)

寫在前面的話

上次發(fā)布過一篇同樣標(biāo)題的文章。但是因?yàn)榭缬蚍矫孀龅貌惶硐?。我進(jìn)行了修改,并重新分享給大家。

如果這篇文章對(duì)您有所幫助,請(qǐng)您點(diǎn)擊一下推薦。以便有動(dòng)力分享出更多的“偷懶小工具”

目的 

目的很明確,就是搭建單點(diǎn)登錄的幫助類,并且是一貫的極簡(jiǎn)風(fēng)格(調(diào)用方法保持5行以內(nèi))。

并且與其他類庫(kù),關(guān)聯(lián)性降低。所以,不使用WebAPI或者WebService等。

思路

因?yàn)樯洗斡信笥颜f,光看見一堆代碼,看不見具體思路。所以,這次分享,我把思路先寫出來。

懶得看實(shí)現(xiàn)代碼的朋友,可直接查看“思路”這個(gè)子標(biāo)題。

同時(shí)如果有好的想法,請(qǐng)修改后在github上推給我。Talk is cheap,Show me the code

思路

同域

同域需要考慮的問題比較少。只需要考慮,MVC和WebForm的Request如何獲取即可。

實(shí)現(xiàn)流程圖如下

1. 因?yàn)槭鞘褂猛瑯拥腃ookie所以名稱和加密方式必須一致。

2. 需要設(shè)置登錄成功后,回跳的網(wǎng)址。因?yàn)镕orms身份認(rèn)證的ReturnURL不能獲得請(qǐng)求原網(wǎng)址。

3. 剩下的就如圖所示了。不明白的可以追問,我就不細(xì)說了。

跨域

跨域除了需要考慮同域的問題外,還需要考慮狀態(tài)共享。因?yàn)橥床呗詥栴},故此使用JSONP

1. 因?yàn)椴皇荂ookie共享,所以只需要設(shè)置相同的加密方法即可。

2. 需要在認(rèn)證網(wǎng)站,添加可登錄的其他網(wǎng)站集合,使用逗號(hào)分隔。

3. 需要在其他網(wǎng)站,創(chuàng)建一個(gè)Login頁面并調(diào)用幫助類的驗(yàn)證方法。配置認(rèn)證網(wǎng)站URL。

4. 當(dāng)認(rèn)證網(wǎng)站登錄成功后,會(huì)根據(jù)配置的其他網(wǎng)站,給他們發(fā)送JSONP請(qǐng)求,讓他們自動(dòng)登錄。

5. 注銷同理。JSONP請(qǐng)求方式,可參考這篇文章:jsonp詳解。使用的就是添加js標(biāo)簽的方式。

至此,思路說明結(jié)束。不明白的可以追問。

網(wǎng)友評(píng)論