跨越不同领域的SSO

时间:2009-02-24 16:26:18

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

如何跨域实施单点登录? 我有两个或更多域,我希望所有域使用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就可以了,但我发现我无法控制其他域名cookie! 那么有什么方法可以使它有效吗?

谢谢你,问候, 艾哈迈德

1 个答案:

答案 0 :(得分:1)

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

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

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

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