使用 FormsAuthentication 的跨域 Cookie
Posted
技术标签:
【中文标题】使用 FormsAuthentication 的跨域 Cookie【英文标题】:Cross Domain Cookies With FormsAuthentication 【发布时间】:2010-10-07 22:53:51 【问题描述】:我知道相关的安全风险并已向企业提出,但他们希望让他们的 5 个域共享登录 cookie。
我们正在使用并且没有计划停止使用 ASP.Net 成员资格和配置文件。这可能吗?黑客甚至会不胜感激。
【问题讨论】:
【参考方案1】:使用开箱即用的 ASP.NET 是不可能的。
基于表单的身份验证基于 cookie,cookie 只能设置到特定域。
如果您想要真正的跨域(而不是子域)共享身份验证,则需要单点登录解决方案。
我自己推出了自己的产品,而且相对简单。基本原则是您有一个主域来保存您的身份验证 cookie(票证)。然后,您从所有其他域重定向到该域。它不是很漂亮,但是 Microsoft Passport 就是这样工作的。
你可以在网上找到很多例子,看看这两个链接:
Authentication cookies
Cross domain authentication
【讨论】:
在第二个链接上,如果您在运行演示时遇到问题,因为“密钥在指定状态下无法使用。”,请尝试以下操作:确保密钥文件实际上是在您认为的位置创建的.示例代码似乎包含一个密钥文件,但我们当然想自己制作。为了保存密钥文件(tripleDES.key),我首先必须在 Enterprise Library Configuration 工具中保存配置(右键单击,保存)。保存配置后,我的密钥文件也立即保存,我可以运行演示应用程序。【参考方案2】:这不仅在 ASP.Net 中是不可能的,而且根本不可能。 Cookie 始终是特定于域的 - 没有任何商业浏览器可以以任何其他方式工作。这是设计使然,对于防止广泛滥用 cookie 非常必要。 Muerte 为您指明了正确的方向(单点登录)。
【讨论】:
【参考方案3】:您可以将所有这些域设置为您公司的子域:
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
【讨论】:
以上是关于使用 FormsAuthentication 的跨域 Cookie的主要内容,如果未能解决你的问题,请参考以下文章
FormsAuthentication 的持久 cookie 超时
防止 FormsAuthentication 覆盖 WCF REST 中的响应状态
Firefox不允许我使用FormsAuthentication设置持久性cookie