2009-08-07 79 views
12

我正在爲一系列將共享用戶帳戶信息的站點共同制定計劃。這個想法是,一旦用戶使用他們的OpenID登錄,他們可以訪問任何網站,並知道他們是誰。使用OpenID的ASP.NET MVC多站點SSO

我可以採用哪些常見模式/最佳實踐來達到此目的?

+0

我想我有類似的問題。你能描述你是如何實現它的嗎? – 2010-09-12 13:34:12

回答

12

如果所有網站在其URL中共享一個通用主機名,那麼您可以設置一個auth cookie(FormsAuthentication.SetAuthCookie),指定cookie的路徑爲「/」,以便所有網站都可以看到用戶登錄。

如果這些網站沒有共享一個通用主機名,我認爲唯一能夠真正「一旦登錄,在任何地方登錄(在您的網站環境中)」的唯一方法就是在所有身份驗證發生時一個站點(可能是專門用於驗證用戶的站點)以及其他站點將用戶重定向到該站點以進行身份​​驗證,然後該站點將重定向回。實質上,該認證站點成爲身份提供者,幾乎完全滿足OpenID提供者的角色(事實上DotNetOpenAuth可用於此目的)。由於聽起來您的目標是讓用戶使用其OpenID登錄,因此您的OpenID提供程序可以使用OpenID對該用戶進行身份驗證。您可以編寫自己的純代理OpenID提供程序,只要授權請求中的領域是您信任的網站之一,它就會立即響應checkid_immediate請求。因此,您可以在所有網站中實現單點登錄。

+0

重新設置全局身份驗證Cookie:是否不會導致漏洞?我忘記了這種攻擊被稱爲什麼,但這是authcookie被盜的時候。或者我誤認這是不安全的? 還有一件事 - 是新的堆棧交換站點如何做到這一點(登錄主界面後,您將自動登錄到它的meta)? – 2010-07-10 07:18:44

+0

這不是一個全球性的cookie。它只與單個互聯網主機一樣寬,因爲大多數Cookie都是。如果您控制或信任該主機上的所有網站,則只需執行此操作。 如果所有* .stackexchange.com站點共享一個用戶的登錄名,那麼這個cookie可能是域名範圍的。 – 2010-07-11 13:04:35

1

請從微軟考慮以下方式對Web服務安全&做法:

經紀人的身份驗證 - http://msdn.microsoft.com/en-us/library/aa480560.aspx

主要議題是 - Web服務安全

場景,模式,和實施指南Web Services Enhancements(WSE)3.0

http://msdn.microsoft.com/en-us/library/aa480545.aspx

最終你可以做很多事情。我通過使用指向另一個域的一個網站的令牌構建了一個URL,從而實現了簡單的單點登錄。加密的令牌編碼包含要返回到以前的域的詳細信息。在第二個域上接收到傳入請求後,基礎Web服務將使用兩個域都知道的共享私有密鑰來檢查傳入請求的令牌對前一個域是否有效。