【问题标题】:SSO across different domains跨不同域的 SSO
【发布时间】:2009-02-24 16:26:17
【问题描述】:

如何实现跨域的单点登录? 我有两个或多个域,我希望它们都使用 SqlMembershipProvider(ASP.NET 2.0 成员数据库)通过一台服务器进行身份验证 我有托管 asp.net 成员数据库的域 foo.com 和另一个想要通过 foo.com 进行身份验证的域 bar.com。 我在互联网上找到了很多针对不同应用程序但在同一个域但不同域中的文章我没有找到完整的文章描述循环,我看到一些使用 FormsAuthenticationTicket 类或 FormsAuthentication 类。我知道 web.config 中的 machineKey 应该是一样的。我认为很容易让 foo.com 一旦他通过身份验证只需复制身份验证 cookie 并将 cookie 的域从 foo.com 更改为 bar.com 但我发现我无法控制其他域 cookie! 那么有什么办法让它工作呢?

谢谢和问候, 艾哈迈德

【问题讨论】:

  • 你能给我一个关于如何处理来自 HttpModule 的 HTTP 状态码的例子吗?我仍然想使用普通的 asp.net-membership (aspnetdb) 对用户进行身份验证?还有另一个问题,asp.net 中的哪个部分正在处理重定向到登录页面并将引用者添加到 ReturnUrl 查询字符串作为相对路径而不是完整路径,我想处理它以开始重定向到完整路径。还有网络服务呢,我可以通过网络服务器进行身份验证吗?以及如何?

标签: cookies asp.net-membership membership single-sign-on sqlmembershipprovider


【解决方案1】:

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

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

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

另一边的 HttpModule 现在从登录站点拾取重定向回来,检查登录票是否有效,并替换 HttpContext.User (一定要封装现有用户,如果有的话,那么你可以将 IsInRole 调用路由到该 IPrincipal)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    相关资源
    最近更新 更多