使用FormsAuthentication的跨域Cookie

时间:2009-02-16 20:24:30

标签: asp.net cookies asp.net-membership forms-authentication cross-domain

我知道相关的安全风险并将其与业务联系起来,但他们希望让他们的5个域共享登录cookie。

我们正在使用并且没有计划停止使用ASP.Net Membership和Profiles。这可能吗?黑客甚至会非常感激。

3 个答案:

答案 0 :(得分:9)

开箱即用的ASP.NET无法实现。

基于表单的身份验证基于cookie,cookie只能设置为特定的域。

如果您想要真正的跨域(非子域)共享身份验证,则需要单点登录解决方案。

我已经完成了自己的工作而且相对简单。基本原则是您拥有一个主域,其中包含您的身份验证cookie(票证)。然后,您从所有其他域重定向到该域。它不是很漂亮,但事件Microsoft Passport就是这样。

你可以在网上找到很多例子,看看这两个链接:

Authentication cookies

Cross domain authentication

答案 1 :(得分:4)

您可以将所有这些域设置为贵公司的子域:

www.company.com
shop.company.com
sales.company.com
research.company.com
..

然后您就可以将cookie设置为父域,并且它将对所有子域可见。

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
cookie.Domain = ".company.com";
Repsonse.Cookies.Add(cookie);

此致 Max Chernyshov http://prontocoder.com

答案 2 :(得分:2)

不仅ASP.Net这是不可能的,但根本不可能。 Cookie始终是特定于域的 - 任何商业浏览器都不会以任何其他方式工作。这是设计上非常必要的,以防止广泛滥用cookie。 Muerte向您指出正确的方向(单点登录)。