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 但我发现我可以' t 控制其他域 cookie!那么有没有办法让它工作呢?

谢谢你和问候,艾哈迈德

4

1 回答 1

1

这不是一个简单的问题,但我可以给你一些提示。

为了使用允许匿名访问或要求用户登录的 ASP.NET web.config 设置,您需要创建一个挂钩 HttpApplication.EndRequest 的模块,并检查 HTTP 错误 401(这意味着需要身份验证)。
重置错误代码并重定向到您的单点登录站点。在这里您可以照常登录。

现在开始最困难的部分:您需要以安全的方式通过线路将用户凭据传输到另一台服务器。您可以使用对称加密和共享密钥,或通过非对称加密交换密钥来实现此目的。

另一端的 HttpModule 现在从登录站点获取重定向,检查登录票是否有效,并替换 HttpContext.User(一定要封装现有用户,如果有的话,那么您可以路由 IsInRole打电话给那个 IPrincipal)。

于 2009-02-24T20:58:54.430 回答