电竞比分网-中国电竞赛事及体育赛事平台

分享

單一登陸(Single Sign-on)問題

 kenwang 2007-09-06

大型的互聯(lián)網(wǎng)網(wǎng)站總有不少獨(dú)立的網(wǎng)絡(luò)應(yīng)用,而每個應(yīng)用都有些需要用戶登陸后才能看到的內(nèi)容。很明顯,你不想在每個應(yīng)用里搞一套自己的登陸方案,設(shè)置自己的登陸頁面。再說,如果用戶每換一個應(yīng)用就需要登陸一次,很麻煩,我們需要一個統(tǒng)一的登陸方案,用戶登陸一次即可訪問其他應(yīng)用的方案。

在論壇上看到過一些建議,一般都是利用ASP.NET里基于Form的認(rèn)證方法,其中一個方案是把所有的應(yīng)用變成子目錄,而非單獨(dú)的虛擬目錄,然后集中起來放在一個虛擬目錄下,然后在虛擬目錄下設(shè)置單一的認(rèn)證。但這方案大概只適用于網(wǎng)絡(luò)應(yīng)用都集中在單一服務(wù)器上的情形,而且強(qiáng)制去虛擬化也減少了其中應(yīng)用們的相對獨(dú)立性。

當(dāng)然,微軟已經(jīng)提供了一個很好的方案,Passport認(rèn)證服務(wù)。ASP.NET也支持這服務(wù),查看一下System.Web.Security命名空間下以Passport開頭的類名就知道了。如果你想在你的應(yīng)用里使用Passport認(rèn)證服務(wù)的話,你需要下載.NET Passport SDK,可以參考

.NET Passport Single Sign-In

或DEVX網(wǎng)站上的這篇文章

Set Up Passport Authentication in ASP.NET

看是如何設(shè)置的。

但在很多情形下,這方案也許不是很恰當(dāng),但我們可以模仿Passport認(rèn)證服務(wù)的工作機(jī)理來定做一個方案。在MSDN上好象找不到詳細(xì)的Passport協(xié)議內(nèi)容,找到的這一頁則不夠詳細(xì)。你可以參考下列文章來了解一下Passport認(rèn)證過程:

Enable Single Sign-on in ASP.NET with Passport

但大概的過程是這樣的:

一。用戶訪問你網(wǎng)站上的某一網(wǎng)頁
二。兩種情形
     A。如果你的網(wǎng)頁發(fā)現(xiàn)用戶尚未被認(rèn)證,則顯示認(rèn)證登陸(Sign In)按鈕
       1。用戶按登陸按鈕
       2。你的網(wǎng)頁重新定向用戶請求到認(rèn)證服務(wù)器,并提供你的網(wǎng)站的ID
       3。兩種情形
           a。如果認(rèn)證服務(wù)器通過cookie發(fā)現(xiàn)用戶尚未被認(rèn)證,認(rèn)證服務(wù)器顯示用戶名字/密碼登陸表單,用戶輸入名字/密碼,認(rèn)證服務(wù)器認(rèn)證后,在用戶瀏覽器端生成一個認(rèn)證cookie,并重新定向用戶請求回到原來你的網(wǎng)頁,并在URL里提供用預(yù)先生成的你網(wǎng)站的公鑰加密過的ticket和用戶profile信息,這些信息的細(xì)節(jié)參考上述文章
           b。如果認(rèn)證服務(wù)器通過cookie發(fā)現(xiàn)用戶已經(jīng)被認(rèn)證過(也許是在別的應(yīng)用/網(wǎng)站里),認(rèn)證服務(wù)器更新那個認(rèn)證cookie,并重新定向回到原來你的網(wǎng)頁,并在URL里提供用預(yù)先生成的你網(wǎng)站的公鑰加密的ticket和用戶profile信息

         你的網(wǎng)頁檢查URL,用預(yù)先生成的你網(wǎng)站的私鑰,獲取用戶信息,生成一認(rèn)證cookie,然后顯示退出認(rèn)證(Sign Out)按鈕

     B。如果你的網(wǎng)頁發(fā)現(xiàn)用戶已經(jīng)被認(rèn)證,顯示退出認(rèn)證(Sign Out)按鈕

三。如果用戶點(diǎn)擊退出認(rèn)證按鈕,則將觸發(fā)一個到認(rèn)證服務(wù)器的退出認(rèn)證網(wǎng)頁的請求,認(rèn)證服務(wù)器的退出網(wǎng)頁根據(jù)回來的認(rèn)證cookie,為每個目前用戶已經(jīng)登陸的應(yīng)用/網(wǎng)站生成一個〈IMG〉,其屬性SRC則指向各個應(yīng)用/網(wǎng)站的退出認(rèn)證頁面,并使認(rèn)證服務(wù)器的認(rèn)證cookie過期。而各個應(yīng)用/網(wǎng)站的退出認(rèn)證網(wǎng)頁,則把自己的認(rèn)證cookie過期。

結(jié)果是,用戶點(diǎn)擊退出認(rèn)證按鈕的話,他將從目前登陸的所有應(yīng)用/網(wǎng)站退出。

當(dāng)然,你定制的方案也許不用這么復(fù)雜或健壯,你可以考慮不使用PKI。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多