【问题标题】:Cors SET-COOKIE headerCors SET-COOKIE 标头
【发布时间】:2021-01-08 17:11:08
【问题描述】:

丹尼尔 W 回答。

My mistake was that I was calling a HTTP server endpoint instead of it's HTTPS version.

其他问题涉及同一主题,但经过所有尝试后问题仍未解决。

我的问题:

我无法从我的第二个 JS 客户端登录:

  • https://localhost:4433 工作正常(SET-COOKIE 标头存在且 cookie 已设置)
  • https://localhost 不工作(SET-COOKIE 标头存在但未设置 cookie)

登录端点:

http://localhost:8000/home/login

响应标头:

    Set-Cookie: .AspNetCore.Cookies=SomeCookieHere; expires=Sun, 10 Sep 2022 14:12:52 GMT; path=/; secure; samesite=none; httponly

JavaScript:

    $.post({
        xhrFields: {
            withCredentials: true
        },
        crossDomain: true,
        type: 'POST',
        url: 'http://localhost:8000/home/login', 
        data: {"userName":"userName","password":"password"},
        contentType: "application/x-www-form-urlencoded",
        dataType: "text/html",
        success: function(data) {}
    });

C#:

    authBuilder.AddCookie(options =>
    {
        options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
        options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
        options.LoginPath = new PathString("/");
    })

【问题讨论】:

  • 在 JS 中你有 http://localhost:8000/。请解释您问题中三个目标之间的区别。您从哪个站点执行 ajax 请求,您从哪个站点发送 cookie?
  • Daniel,- 服务器:localhost:8000/home/login - 客户端 1:localhost:4433 是一个 ASP-Vue 客户端,工作正常 - 客户端 2:localhost - 一个简单的 JS 客户端,不工作
  • 如果你在端口 4433 上关闭服务器并在端口 443 上重新启动它,它将工作。

标签: authentication cross-domain setcookie samesite


【解决方案1】:

您不能在非安全上下文中设置安全 cookie:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

具有 Secure 属性的 cookie 仅通过 HTTPS 协议的加密请求发送到服务器,从不使用不安全的 HTTP,因此不能轻易被中间人攻击者访问。不安全的网站(在 URL 中带有 http:)无法使用 Secure 属性设置 cookie。

$.post({
    // url: 'http://localhost:8000/home/login', // Can't use HTTP endpoint
    url: 'https://localhost:4433/home/login', // This works
});

【讨论】:

  • 没有与我尝试针对 HTTP 服务器端点对 HTTPS 客户端进行身份验证相关的警告。但这解决了我的问题。使用端点的 HTTPS 版本有效。我为此浪费了很多时间。
  • @profimedica 我不懂 ASP 但你可以在开发时删除这个options.Cookie.SecurePolicy = CookieSecurePolicy.Always;,或者在本地安装证书并使用 https。
  • 我将开发证书和安全策略都设置为无,如 cookie 所示:安全;同一站点=无; httponly
  • @profimedica cookie 中的属性secure 来自options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
猜你喜欢
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多