【问题标题】:Forms authentication and authentication ticket cookie domain表单身份验证和身份验证票 cookie 域
【发布时间】:2015-11-03 16:40:28
【问题描述】:

我正在尝试配置 DEV 环境以支持在子域之间共享身份验证和会话。

目前,我在 DEV 机器上配置了 IIS 和 hosts 文件来处理对 mydomain、sd1.mydomain、sd2.mydomain、sd3.mydomain 的请求。 Web 应用程序本身按预期工作,我可以浏览所有子域上的所有页面,但需要身份验证的页面除外。当我尝试登录时,服务器端的一切看起来都很完美(用户找到了,cookie 创建并添加到响应中),但是 cookie 没有到达浏览器(我尝试了 Chrome 和 IE)。

我有一个创建和存储身份验证票证的代码,我在 web.config 的 authentication.forms 中设置了 domain=".mydomain":

var now = DateTime.UtcNow.ToLocalTime();

var ticket = new FormsAuthenticationTicket(
 1 /*version*/, _user.Username, now, now.Add(FormsAuthentication.Timeout),
isPersistentCookie, _user.Username, FormsAuthentication.FormsCookiePath);

var encryptedTicket = FormsAuthentication.Encrypt(ticket);

var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
cookie.HttpOnly = true;
if (ticket.IsPersistent)
{
     cookie.Expires = ticket.Expiration;
}
cookie.Secure = FormsAuthentication.RequireSSL;
cookie.Path = FormsAuthentication.FormsCookiePath;
if (FormsAuthentication.CookieDomain != null)
{
     cookie.Domain = FormsAuthentication.CookieDomain;
}

_httpContext.Response.Cookies.Add(cookie);

当我调试时,上面的代码工作正常,用户是正确的,并且具有正确域的 cookie 被添加到响应中。

如果我从 web.config 中删除 domain=".mydomain",则身份验证有效,但仅适用于 mydomain 而不是子域。

我做错了什么?

【问题讨论】:

    标签: asp.net cookies forms-authentication subdomain


    【解决方案1】:

    删除开头的点,从domain= 开始,您必须将它作为domain=".mydomain.com" 与此处所述的第一个点http://www.w3.org/Protocols/rfc2109/rfc2109(第7 页),感谢@AlbatrossCafe 的评论

    此设置同时用于 cookie 和身份验证。

    【讨论】:

    • 谢谢,它解决了我的问题。不知道 cookie 域值需要“.com/.something”。
    • 网络上的所有其他内容都指定您必须在您的域前面添加点。 W3 规定明确指定的域必须始终以点开头。 w3.org/Protocols/rfc2109/rfc2109
    • @AlbatrossCafe 谢谢你的留言,我很怀念。
    【解决方案2】:

    没有错。如果 cookie 上没有提供域,则 cookie 应该仅用于发布域。

    【讨论】:

    • 我想设置域,但是当我这样做时,cookie 只是没有到达浏览器。然后它不会随请求一起发送,并且 FormAuthentication 不起作用。我设置域 .mydomain 并希望在 mydomain 和 sd1.mydomain 上使用它。
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2011-01-28
    • 1970-01-01
    • 2013-10-30
    • 2012-07-25
    • 2012-08-01
    • 2017-01-17
    • 2014-04-01
    相关资源
    最近更新 更多