12

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

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

4

2 回答 2

12

如果所有站点在其 URL 中共享一个共同的主机名,那么您可以设置一个身份验证 cookie (FormsAuthentication.SetAuthCookie),将 cookie 的路径指定为“/”,以便所有站点都可以看到用户已登录。

如果这些站点不共享一个共同的主机名,我认为获得真正“一旦登录,在任何地方都登录[在您的网站范围内]”的唯一方法是让所有身份验证只在一个站点上进行(也许一个专用于对用户进行身份验证的站点),其他站点将用户重定向到该站点进行身份验证,然后该站点将重定向回来。从本质上讲,该身份验证站点成为身份提供者,并且几乎完全充当了 OpenID 提供者的角色(实际上,DotNetOpenAuth 可以在这里用于此确切目的)。由于听起来您的目标是让用户使用他们的 OpenID 登录,因此您在该身份验证站点上的 OpenID 提供者本身可以使用 OpenID 来对用户进行身份验证。您可以编写您自己的纯委托 OpenID 提供程序,使其始终立即响应 checkid_immediate 请求,只要 auth 请求中的领域是您受信任的站点环之一。因此,您可以在所有站点上实现单点登录。

于 2009-08-07T22:47:33.617 回答
1

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

代理身份验证 - 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 服务会使用两个域都知道的共享私有密钥检查传入请求的令牌是否对前一个域有效。

于 2009-08-11T14:46:53.300 回答