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