2

如何跨域實現單一登錄? 我有兩個或兩個以上的域名,我希望他們都通過一個服務器使用SqlMembershipProvider(ASP.NET 2.0會員數據庫)進行身份驗證 我有域名foo.com承載了asp.net會員數據庫和另一個域bar.com想通過foo.com進行身份驗證。 我在互聯網上發現了很多關於不同應用程序的文章,但是在同一個域但不同的域中,我沒有找到完整的文章描述了這個循環,我看到一些使用FormsAuthenticationTicket類或FormsAuthentication類。我知道web.config中的machineKey應該是一樣的。我認爲讓foo.com一旦通過身份驗證就可以輕鬆地複製身份驗證cookie並將cookie的域名從foo.com更改爲bar.com,但我發現我無法控制其他域cookie! 那麼有什麼辦法可以使它工作?跨不同域名的SSO

謝謝和問候, 艾哈邁德

+0

你能給我一個關於如何處理來自HttpModule的HTTP狀態代碼的例子嗎?仍然我想使用正常的asp.net-membership(aspnetdb)來認證用戶? 另一個問題,在asp.net中的哪個部分處理重定向到登錄頁面,並將引用者添加到ReturnUrl查詢字符串作爲相對路徑而不是完整路徑,我想處理它以開始重定向到完整路徑。 也有關於Web服務,我可以通過Web服務器進行身份驗證嗎?如何? – 2009-03-02 00:38:37

回答

1

這不是一個簡單的問題,但我可以給你一些提示。

爲了與ASP.NET web.config設置允許匿名訪問,或要求用戶工作進行登錄,您需要創建掛鉤HttpApplication.EndRequest一個模塊,並檢查HTTP錯誤401(此意味着需要認證)。
重置錯誤代碼並重定向到您的單一登錄網站。在這裏你可以照常登錄。

現在最難開始的部分是:您需要通過電纜將用戶憑據以安全的方式傳輸到其他服務器。您可以使用對稱加密和共享密鑰或通過非對稱加密交換密鑰來實現此目的。

另一方面的HttpModule現在從登錄站點獲取重定向,檢查登錄票證是否有效,並替換HttpContext.User(確保封裝現有用戶,如果有的話,那麼你可以將IsInRole調用路由到該IPrincipal)。