Owin cookie身份验证设置cookie未保存在浏览器中

Posted

技术标签:

【中文标题】Owin cookie身份验证设置cookie未保存在浏览器中【英文标题】:Owin cookie authentication set-cookie not saving in browser 【发布时间】:2013-09-11 11:32:04 【问题描述】:

我正在此堆栈上构建自托管 Web 服务器: 欧文 南希 Web API 2

我正在使用来自 Katana 的 Microsoft.Owin.Security.Cookies 进行类似表单的身份验证。我得到了 Set-Cookie 标头作为响应,但 cookie 没有被保存,也没有包含在下一个请求中。所以有什么问题?我做错了什么?

Owin 启动:

app.UseCookieAuthentication(new CookieAuthenticationOptions()
        
            AuthenticationMode = AuthenticationMode.Active,
            AuthenticationType = "GM",
            CookieHttpOnly = true,
            CookieSecure = CookieSecureOption.SameAsRequest,
            CookiePath = "/",
            CookieName = CookieAuthenticationDefaults.CookiePrefix + "GM",
            CookieDomain = "localhost",
        );

控制器代码:

var context = Request.GetOwinContext();
context.Authentication.SignIn(new AuthenticationProperties()
    
        IsPersistent = true
    ,
    new ClaimsIdentity(new[] new Claim(ClaimsIdentity.DefaultNameClaimType, user.Login), "GM"));
context.Response.Headers.Add("Location", new [] "/" );
return Request.CreateResponse(HttpStatusCode.Found);

响应头:

Cache-Control:no-cache
Content-Length:0
Date:Wed, 11 Sep 2013 11:11:23 GMT
Expires:-1
Location:/
Pragma:no-cache
Server:Microsoft-HTTPAPI/2.0
Set-Cookie:.AspNet.GM=AQAAANCMnd8BFdERjHoAwE_Cl-sBAAAABui2rBibE0yPXB0-v3C06gAAAAACAAAAAAAQZgAAAAEAACAAAAC1mQV3jGo_WAhMQ-hzsmzgkdbdCclWIAX-msbE0_12zQAAAAAOgAAAAAIAACAAAABuQjBg3EJIka151hvBgtlPGfQ2O_cwNI2VVh86dchTDXAAAAD21O9DnNk4yLU9eddVfY3bT9P1CEudNeLvwohkSTAQBP2onuIQfgl9F99Je5waPddckh2llD2kjftSMQPhzgE9vKm-_wE42hXhc9FIgfxpD5AdaeGatwpEcwDfGJJdpQnObX1pbjEFIXLVJxGm5qMUQAAAAC8AiFTaXmzrfRy4-jR6zqMmSKddzddmiBLGClAckWOy6W2YWdf50N2zhIj_MwN8-zi-B0tlv87pzAt-6RDZYZs; domain=localhost; path=/; expires=Wed, 25-Sep-2013 11:11:24 GMT; HttpOnly

【问题讨论】:

我已经将 cookie 发送回来和第四次发送,但我的下一个请求没有得到验证,你能做到吗? 【参考方案1】:

我解决了这个问题。这是因为“域=本地主机”。似乎 'localhost' 不是域参数的有效值。

【讨论】:

刚刚帮助了我——这个解决方案仍然适用。谢谢! 编辑: 我的问题是我根本没有指定域。它在本地调试时可以正常工作,但在部署到服务器环境时无法正常工作。【参考方案2】:

您可能会遇到类似的问题:Safari doesn't set Cookie but IE / FF does

尝试将 HttpStatusCode 设置为 HttpStatusCode.Ok

某些浏览器只接受来自特定响应代码(如 200、302)的 cookie。

【讨论】:

很遗憾,但我尝试过的所有浏览器(Chrome、IE、FF)中都没有保存 cookie。而且我已经尝试过 HttpStatusCode.OK,但它并没有改变任何东西。 您是否仔细检查了 cookie 上的过期值。它不会立即过期,对吗? 如您所见,它将于 9 月 25 日到期。我尝试将过期时间跨度设置为 30 天,但没有结果。啊,还有,我用的是非标准的8080端口,会不会出问题? 我解决了这个问题。这是因为“域=本地主机”。似乎 'localhost' 不是域参数的有效值。

以上是关于Owin cookie身份验证设置cookie未保存在浏览器中的主要内容,如果未能解决你的问题,请参考以下文章

在与一个 IIS 应用程序连接的两个域之间共享 OWIN 身份验证 Cookie

在 OWIN 托管的 SignalR 实现中接受 ASP.NET 表单身份验证 cookie?

IsPersistent 在 OWIN Cookie 身份验证中的工作原理

OWIN Cookie 身份验证 - 使用 Kerberos 委派模拟 SQL Server

是否可以配置 OWIN Cookie 身份验证以防止某些 URL 影响滑动过期?

是否可以按用户设置 ASP.NET Owin 安全 cookie 的 ExpireTimeSpan?