在Springboot中如何配置来自子域(api.example.com)的仅http响应cookie(刷新令牌)

问题描述 投票:0回答:1

我的前端在“https://example.com”上运行,后端在“https://api.example.com”上运行。

从后端,登录端点“https://api.example.com/auth/login”在响应标头中返回刷新令牌,如下所示(我可以在浏览器网络选项卡中看到它):

Access-Control-Allow-Origin:https://example.com
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Set-Cookie:  refreshToken=eyJhbGciOiJIUzI1NiJ9...; Path=/auth/refresh; Domain=example.com; Max-Age=31536000000; Expires=Thu, 23 Oct 3023 00:57:41 GMT; Secure; HttpOnly; SameSite=Lax

other headers....

但是当前端调用刷新访问令牌时,请求不包含刷新令牌。浏览器不会在请求中附加令牌,服务器会以 403 拒绝它。以下是刷新令牌的请求详细信息:

Request URL:https://api.example.com/auth/refresh
Request Method:POST
Status Code:403 Forbidden
Remote Address:xxxxx
Referrer Policy:strict-origin-when-cross-origin

请求标头:

:authority:api.example.com
:method:POST
:path:/auth/refresh
:scheme:https
Accept:application/json, text/plain, */*
Accept-Encoding:gzip, deflate, br, zstd
Accept-Language:en-GB,en-US;q=0.9,en;q=0.8
Content-Length:0
Origin:https://example.com
Priority:u=1, i
Referer:https://example.com

当刷新令牌来自同一子域并且刷新令牌 cookie 中也设置了域属性时,为什么浏览器不附加或存储刷新令牌?

该 cookie 在浏览器的开发工具中也不可见。

spring-boot https refresh-token httpcookie
1个回答
0
投票

最终通过“J Asgarov”我解决了这个问题。 cookie 设置没问题,因为我已经在其中设置了域“example.com”(不再需要在其中引导

.
,如果根匹配,浏览器也允许子域)。

真正的问题是,我仅针对

withCredentials
请求将
refresh token
设置为 true,而对于
login
请求也需要为 true。启用登录后,浏览器能够读取刷新令牌 cookie,否则登录响应会忽略它。

根据网络文档,传出请求和传入响应都需要 withCredentials 标志。 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

© www.soinside.com 2019 - 2024. All rights reserved.