我正在更新旧的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
我读了很多其他的问题,但我还是不知道我在哪里搞砸了。如果能提供一些帮助,我将不胜感激。
1条答案
按热度按时间tvmytwxo1#
withcredentials
不是HTTP标头。withCredentials
是一个property of the XMLHttpRequest object获取API使用
credentials
选项。