ASP.NET跨應用程式進行登入的解決
最近一個朋友問我一個問題:
如何可以將ASPdotNET Forum2.0放到他的一個專案中(好象網上也有人討論過如何將dotText和ASPdotNET Forum等開源專案整合起來的),他原來的專案已經有一套使用者登入機制了,而且使用者資料庫也是現成的,如何使得在他原來系統上登入後就可以直接轉到Forum上,而又不需要再次輸入使用者資訊呢?剛開始感覺a piece of cake...象這種一次登入,然後可以訪問多個應用其實在很久就已經提出來了,在幾年前還幫公司做過一個類似的產品原型,但那個是針對異構網站的,說白了就是做一個代理,只是內部有套機制將後面的幾個異構網站的使用者資料庫對映起來而已。這種方式看起來似乎可以解決問題,但資料庫之間的對映關係處理起來很麻煩,如果下面應用多了的話,工作量是很大的。
對於這種技術,似乎有個名詞叫Single Sign On,有點象網易的通行證了。如果內部網站是同一批人做的倒問題不大,只要協調好了這個通行證的格式和一些相關的問題就可以了。而朋友的情況似乎也沒有那麼複雜,他原來的專案也是用.NET平臺技術的。.NET平臺下是否有比較好的整合解決方案呢?
這自然涉及到了.NET平臺下驗證的相關問題了。ASP.NET自身已經支援三種驗證方式(不包括None):
1. Windows身份驗證,新建立一個Web應用,似乎預設就是用這樣的方式的。顯然這個不是需要的。
2. Passprot身份驗證,需要Microsoft支援,它其實提供了一個WebServices來幫助你統一完成驗證工作,使 用這個在內部 網專案中似乎沒有太大必要。
3. Forms身份驗證,通過Cookie來傳遞身份驗證資訊,看起來類似通行證之類的,應該是要找的東西了。
圖是Forms身份驗證的資料流程圖(MSDN中的)
上圖十分清晰的描述了Forms身份驗證的基本原理,但是對於多個應用呢?仔細查MSDN(MSDN真的好多資料啊,經常看過了再想翻回去已經忘記在那裡找出來的了 BTW:有沒有MSDN書籤功能的?),發現相關的描述很多,但只有一個“跨應用程式進行Forms 身份驗證”比較具體,而內容就簡單些了。
看來還是需要自己先動手做個簡單的測試來邊試邊查資料了...
先建立一個testLogon的Web應用
主要檔案包括:
default.aspx (通過驗證跳入的頁面)
test1.apsx (登入的頁面)
Global.asax
Web.config (配置檔案)
再建立另外一個testLogon2的Web應用
主要檔案:
default.aspx (通過驗證跳入的頁面)
Global.asax
Web.config (配置檔案)
測試最終達到的效果:
兩個Web應用的default都是受保護的,沒有通過驗證是不可以進入的,即使在輸入訪問地址URL,會自動跳轉到testLogon\test1.aspx要求登入,當登入通過後,則可以任意在兩個應用的default.aspx跳轉。
testLogon\default.aspx中有Logout的功能,Logout後則需要重新登入了。
要達到這個效果,基本設定需要:
1.將IIS配置為允許匿名訪問,保證可以通過IIS來控制傳遞請求給ASP.NET;
2.如果必要傳輸過程配置為SSL,這裡沒有這個必要了;
3.對應的兩個應用的配置檔案必須設成一致;
以上這些基本設定在MSDN中都可以找到相關的描述,但是實驗這個效果到成功卻花費了比預計長的時間,因此覺得十分有必要將其記錄下來,對自己對他人都有好處。
得到的經驗教訓如下:
1.配置檔案Web.config中,將驗證模式設為Forms,而且在下面的引數中,要保證兩邊一致
testLogon的Web.config對應部分
<forms name=".AspNetForums" protection="Encryption" timeout="60" loginUrl="test1.aspx" />
</authentication>
testLogon2的Web.config對應部分
<forms name=".AspNetForums" protection="Encryption" timeout="60" loginUrl="\testLogon\test1.aspx" />
</authentication>
2.<machineKey>的增加是必須的
為保證兩邊兩邊應用對cookie的處理和讀取一致,這個屬性是必須的,且要相同
validationKey= "C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey= "8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
validation="SHA1">
</machineKey>
3.MSDN雖然要查,但不可以完全依靠,特別是程式碼
在MSDN中,關於machineKey的程式碼如下:
<system.web>
<authentication>
<forms name=".ASPXAUTH"
loginUrl="logon.aspx"
protection="all" <!-- Protection must be identical.-->
timeout="30"
path="/" > <!-- Path must have a compatible scope.-->
</authentication>
<!-- Validation and decryption keys must exactly match and cannot
be set to "AutoGenerate". The validation algorithm must also
be the same. -->
<machineKey>
validationKey= "C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
decryptionKey= "8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
validation="SHA1"
isolateApplications="false"
</machineKey>
</system.web>
</configuration>
但顯然有著錯誤的,大家編譯一下就知道了,格式錯了,而且isolateApplication也不是這樣用的
4.為保證兩邊讀到的cookie一致,不要用isolateApplication,它使得各自用自己的cookie了。
5.關於Global.asax的注意,對於Web.config中authentication的節點會觸發Global.asax中的事件的,對應
函式是
6.研究一下ASPdotNetForum2.0程式碼發現,Global.asax不見了,而在它的配置檔案中多了一項
<add name="AspNetForums" type="AspNetForums.ForumsHttpModule, AspNetForums.Components" />
</httpModules>
是的,看一下ForumsHttpModule的原始碼,結構和Global.asax基本一樣,一樣有個事件觸發函式
下面不用我多說了吧?具體該如何做到和dotNetForum一起達到SSO的目標的答案已經出來了
本文轉自風前絮~~部落格園部落格,原文連結:http://www.cnblogs.com/windsails/archive/2004/10/15/52818.html,如需轉載請自行聯絡原作者
相關文章
- 3分鐘瞭解如何跨應用、跨形態無縫登入
- 進入與退出應用 / 登入與退出
- win10應用商店登入失敗的解決方法Win10
- node用2行程式碼解決? HTTP跨域?行程HTTP跨域
- ASP.NET Web應用程式安全解決方案淺析ASP.NETWeb
- 完全跨域的單點登入(SSO)解決方案原始碼解析跨域原始碼
- Angular應用解決跨域訪問的問題Angular跨域
- 微信小程式登入方式的修改解決方案微信小程式
- 分散式應用的登入檢驗解決方案 JWT講解( json web token)分散式JWTJSONWeb
- 筆記:啟動登入HOMESTEAD、建立應用、解決問題筆記
- 解決Snackbar無法進行跨頁面展示的問題
- 進入與退出應用 / 會話重用與自動登入會話
- 微信小程式 unionid 登入解決方案微信小程式
- ASP.NET 微軟Web應用示例程式走廊-專案解決方案ASP.NET微軟Web
- win10登入cf時clientmfc未響應怎麼解決_win10登入cf時clientmfc未響應的解決方法Win10client
- asp.net 應用程式中同步方法呼叫非同步方法無響應解決方法ASP.NET非同步
- Java 自定義註解在登入驗證的應用Java
- 應用程式無法啟動,因為應用程式的並行配置不正確 解決備忘並行
- Cookie Session跨站無法共享問題(單點登入解決方案)CookieSession
- 學習ASP.NET Core(11)-解決跨域問題與程式部署ASP.NET跨域
- vs2005 沒有ASP.NET WEB應用程式(Application)的解決方案ASP.NETWebAPP
- SSH登入很慢問題的解決
- 奇怪的登入問題及解決
- 解決ssh登入慢的問題
- ASP.NET的模擬應用程式ASP.NET
- 應用系統登入慢
- WEB應用的安全的登入認證Web
- win10應用程式無法啟動,因為應用程式的並行配置不正確的解決方法Win10並行
- WebSocket實現app掃描二維碼登入以及ws應用進行負載均衡?WebAPP負載
- 應用RMAN Transportable Database進行資料庫跨平臺遷移Database資料庫
- 在Docker容器中執行ASP.NET MVC應用程式DockerASP.NETMVC
- 【應用服務 App Service】解決無法從Azure門戶SSH登入問題APP
- Asp.net 2.0 用Membership自己寫登入頁面ASP.NET
- oracle程式異常中止時登入掛起問題的解決Oracle
- win10應用程式無法啟動因為應用程式的並行配置不正確怎麼解決Win10並行
- 解決單點登入的一個方法!
- 構建安全的ASP.NET應用程式ASP.NET
- ASP.NET的應用程式域須知ASP.NET