使用OpenID的ASP.NET MVC多站点SSO

时间:2009-08-07 14:23:47

标签: asp.net-mvc openid single-sign-on

我正在为一系列将在其中共享用户帐户信息的网站制定计划。这个想法是,一旦用户使用他们的OpenID登录,他们就可以访问任何网站,并且知道他们是谁。

我可以采用哪些常见模式/最佳实践来实现这一目标?

2 个答案:

答案 0 :(得分:12)

如果所有站点在其URL中共享一个公共主机名,则可以设置一个auth cookie(FormsAuthentication.SetAuthCookie),指定cookie的路径为“/”,以便所有站点都可以看到用户已登录。 / p>

如果网站没有共享一个共同的主机名,我认为真正“一旦登录,在任何地方(在您的网站内)登录的唯一方法”将是所有身份验证仅在一个站点(可能是专门用于验证用户的站点)以及其他站点将用户重定向到该站点进行身份验证,然后该站点将重定向回来。实质上,该auth站点成为身份提供者,几乎完全填充OpenID提供者的角色(事实上,DotNetOpenAuth可用于此目的)。由于您的目标是让用户使用其OpenID登录,因此该auth站点上的OpenID Provider本身可以使用OpenID对用户进行身份验证。您可以编写自己的纯委托OpenID提供程序,只要auth请求中的Realm是您信任的站点环之一,它就会立即响应checkid_immediate请求。因此,您可以在所有网站上实现单点登录。

答案 1 :(得分:1)

请考虑以下模式& Microsoft的Web服务安全实践:

Brokered Authentication - http://msdn.microsoft.com/en-us/library/aa480560.aspx

主要主题是 - Web服务安全性

Web服务增强(WSE)3.0的方案,模式和实施指南

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

最终有很多方法可以做到。我通过从一个指向另一个域的网站构建一个带有令牌的URL来实现一个简单的单点登录。编码&加密令牌包含要提交回以前域的详细信息。在第二个域上收到传入请求后,底层Web服务使用两个域都知道的共享私有密钥检查传入请求的令牌是否对前一个域有效。