大型的互聯(lián)網(wǎng)網(wǎng)站總有不少獨立的網(wǎng)絡(luò)應(yīng)用,而每個應(yīng)用都有些需要用戶登陸后才能看到的內(nèi)容。很明顯,你不想在每個應(yīng)用里搞一套自己的登陸方案,設(shè)置自己的登陸頁面。再說,如果用戶每換一個應(yīng)用就需要登陸一次,很麻煩,我們需要一個統(tǒng)一的登陸方案,用戶登陸一次即可訪問其他應(yīng)用的方案。 在論壇上看到過一些建議,一般都是利用ASP.NET里基于Form的認證方法,其中一個方案是把所有的應(yīng)用變成子目錄,而非單獨的虛擬目錄,然后集中起來放在一個虛擬目錄下,然后在虛擬目錄下設(shè)置單一的認證。但這方案大概只適用于網(wǎng)絡(luò)應(yīng)用都集中在單一服務(wù)器上的情形,而且強制去虛擬化也減少了其中應(yīng)用們的相對獨立性。 當(dāng)然,微軟已經(jīng)提供了一個很好的方案,Passport認證服務(wù)。ASP.NET也支持這服務(wù),查看一下System.Web.Security命名空間下以Passport開頭的類名就知道了。如果你想在你的應(yīng)用里使用Passport認證服務(wù)的話,你需要下載.NET Passport SDK,可以參考 或DEVX網(wǎng)站上的這篇文章 Set Up Passport Authentication in ASP.NET 看是如何設(shè)置的。 但在很多情形下,這方案也許不是很恰當(dāng),但我們可以模仿Passport認證服務(wù)的工作機理來定做一個方案。在MSDN上好象找不到詳細的Passport協(xié)議內(nèi)容,找到的這一頁則不夠詳細。你可以參考下列文章來了解一下Passport認證過程: Enable Single Sign-on in ASP.NET with Passport 但大概的過程是這樣的: 一。用戶訪問你網(wǎng)站上的某一網(wǎng)頁 你的網(wǎng)頁檢查URL,用預(yù)先生成的你網(wǎng)站的私鑰,獲取用戶信息,生成一認證cookie,然后顯示退出認證(Sign Out)按鈕 B。如果你的網(wǎng)頁發(fā)現(xiàn)用戶已經(jīng)被認證,顯示退出認證(Sign Out)按鈕 三。如果用戶點擊退出認證按鈕,則將觸發(fā)一個到認證服務(wù)器的退出認證網(wǎng)頁的請求,認證服務(wù)器的退出網(wǎng)頁根據(jù)回來的認證cookie,為每個目前用戶已經(jīng)登陸的應(yīng)用/網(wǎng)站生成一個〈IMG〉,其屬性SRC則指向各個應(yīng)用/網(wǎng)站的退出認證頁面,并使認證服務(wù)器的認證cookie過期。而各個應(yīng)用/網(wǎng)站的退出認證網(wǎng)頁,則把自己的認證cookie過期。 結(jié)果是,用戶點擊退出認證按鈕的話,他將從目前登陸的所有應(yīng)用/網(wǎng)站退出。 當(dāng)然,你定制的方案也許不用這么復(fù)雜或健壯,你可以考慮不使用PKI。 |
|