Set-Cookie 登录系统

Set-Cookie for a login system

我 运行 在设置 cookie 时遇到了一些问题,根据我所做的阅读,这应该可行,所以我可能遗漏了一些重要的东西。

这种情况:

之前我收到了我的 API 的回复并使用 JavaScript 将它们保存为 cookie,但后来我发现使用 set-cookie 回复 header 更安全在很多情况下。

我有 2 个 cookie:"nuser"(包含用户名)和密钥(包含 session 密钥)。 nuser 不应该是 httpOnly 以便 JavaScript 可以访问它。密钥应该是 httpOnly 以防止流氓脚本窃取用户的 session。此外,客户端对我的 API 的任何请求都应包含 cookie。

log-in请求

这是我当前的实现:我在 localhost:8080/login/login 向我的登录名 api 发出请求(请记住 web-client 托管在 localhost:80,但根据我的阅读,端口号对于 cookie 应该无关紧要)

首先,web-browser 将发出 OPTIONS 请求以确认所有 header 都被允许。我确保服务器响应包含 access-control-allow-credentials 以提醒浏览器可以存储 cookie。

一旦收到 OPTIONS 请求,浏览器就会向登录 API 发出实际的 POST 请求。它发回 set-cookie header 并且此时一切看起来都很好。

问题 set-up 会产生 2 个问题。首先,虽然 nuser cookie 不是 httpOnly,但我似乎无法通过 JavaScript 访问它。我可以在浏览器的 cookie 选项菜单中看到 nuser,但 document.cookie 生成 "".

其次,浏览器似乎只将Cookie请求header放在完全相同的API请求中(登录API):

但是,如果我向仍在我的本地主机服务器上的另一个 API 发出请求,则 cookie header 不存在: 哦,这个 returns 406 只是因为我的服务器当前配置为在用户未通过验证时执行此操作。我知道这可能应该是 403,但在此图像中要关注的是 "cookie" header 未包含在请求 headers.[=15 中这一事实=]

所以,我已经根据我目前对 cookie 的理解解释了我的实现,但我显然遗漏了一些东西。非常感谢发布每个任务的请求和响应 header 应该是什么样子。谢谢。

好吧,仍然不完全是导致这个特定案例问题的原因,但我更新了我的 localhost:80 服务器以接受 api 请求,然后对 localhost:80 执行后续请求80 获得正确的信息。因为 set-cookie header 是由 localhost:80 (客户的来源)设置的,所以一切正常。从我之前的阅读来看,我认为端口并不重要,但显然它们很重要。