2

我有一个不需要任何具体答案的问题,只是一个大致的方向。我为一家拥有许多网站的公司工作。每个站点都需要在某些时候登录。我们有一个所有网站都访问的单一帐户数据库。

登录系统的要求之一是,如果我们在一个站点上登录,我们应该在其他地方自动登录。

它现在的工作方式是在我们的任何站点(比如 site1.com)的页面加载(或初始化,忘记哪个)时,它重定向到一个“主”站点(比如 sitemaster.com)。在 sitemaster.com 上有一个网络服务,用于检查 sitemaster.com 上是否存在该用户的 cookie。如果是,它会重定向回来并让 site1.com 知道用户已经登录(site1.com 然后为 site1.com 创建一个 cookie,因此我们以后不必重定向到 sitemaster.com)。如果用户没有在 sitemaster.com 登录,site1.com 将要求用户登录,并在提交时将用户重定向到登录他们的 sitemaster.com,在 sitemaster.com 域下创建一个 cookie,重定向返回 site1.com 并让 site1.com 知道用户已登录(然后为 site1.com 创建 cookie)。

在注销时采用类似的方法。

这是处理通用登录或跨多个站点自动登录的最佳方式吗?有没有更好的做事方式?

一些要求:

  • 我们的大多数网站都使用 .NET 2.0,但我们计划将它们全部更新到 .NET 4.0。我们想要这个自动登录系统的最佳方法,所以如果需要.NET 4.0,那没关系。
  • 该解决方案不应需要 javascript(我们当前的解决方案在登录过程中需要 javascript)。
  • 该解决方案不应需要 Flash。
  • 可以使用 iframe,只要不需要 javascript。
  • 我们希望能够在不刷新站点的情况下进行 AJAX 登录(使用 jQuery)。由于重定向,当前的解决方案阻止我们这样做。(例如:弹出一个模态框,要求用户登录,当他们登录时,模态框消失并更改了一些内容,但不需要刷新站点)。这不是绝对必要的,但至少我们应该能够在任何重定向发生之前使用 AJAX 验证登录。

任何文章或建议都会非常有帮助。我还有一些与跨站点重用自动登录代码的最佳方式相关的问题(从 ASP.NET 2.0 表单到 ASP.NET 4.0 MVC,但我将其留作另一个问题)。

巴拉

4

2 回答 2

3

简单来说,您的系统与 OpenID 非常相似。实现您自己的内部 OpenID 提供程序并为定制系统节省所有自定义工作和维护/错误修复等可能是值得的。许多网站都支持 OpenID,包括 stackoverflow.com。

http://openid.net/

http://wiki.openid.net/Run-your-own-identity-server

这导致:

http://www.dotnetopenauth.net/

-Oisin

于 2010-09-17T20:22:45.137 回答
0

您所描述的是一个联合的 Web 单点登录方案。最后,我建议您采用 WS-Federation 标准,而不是自己动手。优点是您不太容易引入安全漏洞,并且还能够使用定制 ASP.NET 应用程序以外的应用程序实现单点登录。

于 2010-09-17T20:38:33.600 回答