javascript 为什么不在请求标头中设置Cookie?

xjreopfe  于 2023-03-06  发布在  Java
关注(0)|答案(1)|浏览(133)

我正在更新旧的Symfony REST API/AngularJS应用程序组合的授权过程。
在进行身份验证时,服务器提供cookie,其中包含要存储在浏览器上的几个标记,以便在后续请求中将它们作为标头添加(非常标准),但自从部署到我的测试服务器后,这些cookie标头就没有包含在后续请求中。
在本地,一切都很正常,所以我假设我在请求/响应头中的某个地方丢失了一些安全配置。
注意:

  • API和应用程序位于同一个域中,但位于不同的子域中
  • 这两个子域都使用HTTPS
  • mydomain.com is not in the public suffix list
  • 饼干
  • secure标志已设置
  • SameSite选项设置为strict
  • path选项设置为/,因此应命中我的API的所有路由
  • domain选项设置为mydomain.com。如果我理解正确,它应该允许为所有www.example.com子域设置cookie。mydomain.com subdomains.
  • 请求包含withcredentials标头
  • 响应包括access-control-allow-credential标头

在DevTools中,登录请求如下所示:

General
----------
Request URL: https://subdomain1.mydomain.com/login
Request Method: GET
Status Code: 200 
Remote Address: xxx.xxx.xxx.xxx:xxx
Referrer Policy: strict-origin-when-cross-origin

Response Headers
----------
access-control-allow-credentials: true
access-control-allow-origin: https://subdomain2.mydomain.com
cache-control: private, must-revalidate
content-encoding: br
content-type: application/json
date: Sat, 04 Mar 2023 01:39:21 GMT
expires: -1
host-header: 6b7412fb82ca5edfd0917e3957f05d89
pragma: no-cache
server: nginx
set-cookie: BEARER=<JWT_TOKEN>; expires=Sat, 04-Mar-2023 02:39:21 GMT; Max-Age=3600; path=/; domain=mydomain.com; secure; httponly; samesite=strict
set-cookie: refresh_token=<REFRESH_TOKEN>; expires=Mon, 03-Apr-2023 01:39:21 GMT; Max-Age=2592000; path=/token; domain=mydomain.com; secure; httponly; samesite=strict
vary: Accept-Encoding
vary: Authorization
x-httpd: 1
x-proxy-cache: MISS
x-proxy-cache-info: 0 NC:000000 UP:SKIP_CACHE_SET_COOKIE
x-robots-tag: noindex

Request Headers
----------
:authority: subdomain1.mydomain.com
:method: GET
:path: /login
:scheme: https
accept: application/json, text/plain, */*
accept-encoding: gzip, deflate, br
accept-language: en-CA,en;q=0.9,fr-FR;q=0.8,fr;q=0.7,en-GB;q=0.6,en-US;q=0.5
authorization: <ACCESS TOKEN>
cache-control: no-cache
origin: https://subdomain2.mydomain.com
pragma: no-cache
referer: https://subdomain2.mydomain.com/
sec-ch-ua: "Chromium";v="110", "Not A(Brand";v="24", "Google Chrome";v="110"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36
withcredentials: true

我读了很多其他的问题,但我还是不知道我在哪里搞砸了。如果能提供一些帮助,我将不胜感激。

tvmytwxo

tvmytwxo1#

withcredentials不是HTTP标头。
withCredentials是一个property of the XMLHttpRequest object
获取API使用credentials选项。

相关问题