【发布时间】:2010-10-07 22:53:51
【问题描述】:
我知道相关的安全风险并已向企业提出,但他们希望让他们的 5 个域共享登录 cookie。
我们正在使用并且没有计划停止使用 ASP.Net 成员资格和配置文件。这可能吗?黑客甚至会不胜感激。
【问题讨论】:
标签: asp.net cookies asp.net-membership forms-authentication cross-domain
我知道相关的安全风险并已向企业提出,但他们希望让他们的 5 个域共享登录 cookie。
我们正在使用并且没有计划停止使用 ASP.Net 成员资格和配置文件。这可能吗?黑客甚至会不胜感激。
【问题讨论】:
标签: asp.net cookies asp.net-membership forms-authentication cross-domain
使用开箱即用的 ASP.NET 是不可能的。
基于表单的身份验证基于 cookie,cookie 只能设置到特定域。
如果您想要真正的跨域(而不是子域)共享身份验证,则需要单点登录解决方案。
我自己推出了自己的产品,而且相对简单。基本原则是您有一个主域来保存您的身份验证 cookie(票证)。然后,您从所有其他域重定向到该域。它不是很漂亮,但是 Microsoft Passport 就是这样工作的。
你可以在网上找到很多例子,看看这两个链接:
【讨论】:
这不仅在 ASP.Net 中是不可能的,而且根本不可能。 Cookie 始终是特定于域的 - 没有任何商业浏览器可以以任何其他方式工作。这是设计使然,对于防止广泛滥用 cookie 非常必要。 Muerte 为您指明了正确的方向(单点登录)。
【讨论】:
您可以将所有这些域设置为您公司的子域:
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);
问候, 马克斯·切尔尼绍夫 http://prontocoder.com
【讨论】: