Spring Safari设置cookie不适用于第一方cookie

Spring Safari设置cookie不适用于第一方cookie,spring,http,cookies,safari,token,Spring,Http,Cookies,Safari,Token,登录时,我返回浏览器: Overview URL: https://subdomain.domain.de:8444/api/auth/login Status: 200 Source: Network Adresse: xxx.xxx.x.xx:8444 Initiator: xhr.js:177 Request POST /api/auth/login HTTP/1.1 Accept: application/json, text/plain, */* Content-Type: ap

登录时,我返回浏览器:

Overview
URL: https://subdomain.domain.de:8444/api/auth/login
Status: 200
Source: Network
Adresse: xxx.xxx.x.xx:8444
Initiator: 
xhr.js:177


Request
POST /api/auth/login HTTP/1.1
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=utf-8
Origin: https://subdomain.domain.de
Content-Length: 62
Accept-Language: de-de
Host: subdomain.domain.de:8444
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1 Safari/605.1.15
Referer: https://subdomain.domain.de/login
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

Response
HTTP/1.1 200
Access-Control-Allow-Origin: https://subdomain.domain.de
Content-Type: application/json;charset=UTF-8
Pragma: no-cache
Set-Cookie: accessToken=FycxgaSUgHnBlzMqYn/qsBEm5YBcmX52/eYbm+daUHPP1Fa7edawdawdawO1EdJlz9nyP5FrlPYnh/b//SZJRDs0Am8sGF+UZ+XffvPra8awdawd9+RbHiN0WcL+9T4xLlueMxd5bNVRVKHqeTonSK02Ym0cLxfALOeHrmbdqLS95uNOlzFYbjOuGV7bhwLGk5bavNPv9IWKqNAILAbkkw+gdawdawduM+BXdGE7KFbUgxvGmDw==; Path=/; Domain=subdomain.domain.de; Max-Age=PT448343981H30M29S; Expires=Sat, 16 Apr 2072 22:57:46 GMT; Secure; HttpOnly;SameSite=Lax
Set-Cookie: refreshToken=FycxgaSUgHnBlzMqYn/qsBEm5YBawdawdadawdupnO1EdJlz9nyP5FrlPYnh/b//SZJRDs0Am8sGF+UZ+XffvPra84jWTk9+RbHiM1+aNElVA8jXewqlexh7tGKuawdawdv4pxzC/RsDoGS/Jc8Xkzg133dYMCr7mRHlkU7jijoJrPYUAayiewVIMPUh/IE8sGUqIMKbiGoqAJAawdawdawdawdawdaw03GS4XgbwFj76V2AAAw==; Path=/; Domain=subdomain.domain.de; Max-Age=PT450502981H30M31S; Expires=Fri, 15 Jul 2072 21:57:46 GMT; Secure; HttpOnly;SameSite=Lax
X-XSS-Protection: 1; mode=block
Expires: 0
Transfer-Encoding: Identity
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Date: Mon, 22 Feb 2021 22:58:53 GMT
Access-Control-Allow-Credentials: true
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers
Strict-Transport-Security: max-age=31536000 ; includeSubDomains

Request data
MIME-Typ: application/json
Codierung: utf-8
Anfragedaten: 
我还看到,响应中的cookie:

但是cookie不会保存在浏览器中。这是我在spring后端创建的第一方cookie

在Spring Boot中,我创建了如下cookie:

import org.springframework.http.HttpCookie;
import org.springframework.http.ResponseCookie;


@Component
public class CookieUtil {

    public HttpCookie createAccessTokenCookie(String token, Long duration) {
        return ResponseCookie.from("accessToken", token).maxAge(duration).httpOnly(true).path("/").build();
    }

    public HttpCookie createRefreshTokenCookie(String token, Long duration) {
        return ResponseCookie.from("refreshToken", token).maxAge(duration).httpOnly(true).path("/").build();
    }
}

在safari中,您必须要求用户允许使用您的cookie

从ITP2.1开始,Safari使用其机器学习魔法来识别哪些第一方cookie可用于跟踪。然后,它会阻止cookie,除非您使用存储访问API要求用户允许使用cookie


您可以在此处进一步了解如何使用此功能

Safari和Cookie的使用存在大量问题,如果您查找与此问题相关的信息,您将发现多个错误和解决方案,其中一个适用于某些情况,另一个适用于其他情况

虽然
Lax
更可取(请参见),但您可以尝试将cookies
SameSite
属性设置为
None
。请注意,此更改可能与其他浏览器(尤其是Chrome)相关,并影响应用程序的行为

您可以尝试的另一件事是将cookie的域设置为类似
.domain.de
domain.de
的值,以避免任何可能与子域相关的问题

最后,请注意,在您的屏幕截图中,max age的值似乎没有正确打印。可能不是,但对于您提到的同一版本的Safari,可能也存在类似的问题,因此在下面的中报告了:OP通过调整
max age
cookie属性的值来解决问题。请尝试不同的信息值,也许可以


根据您的评论,供将来参考,在某种程度上,问题似乎实际上与cookie
max age
有关:从cookie中删除
max age
值似乎是解决问题的临时方法。

Hi@farahm。乍一看,一切都很好。cookie是否保存在其他浏览器中?虽然我认为最好使用
Lax
(请参见),但您可以尝试将cookies
SameSite
属性设置为
None
。虽然对于iOS来说,也许这次旅行是相关的。嗨@jccampanero。谢谢你的回复。我给SameSite=None一次机会感谢你@farahm。我希望有帮助。如果你有时间的话,请回顾一下上面提到的文章,我觉得它很有趣。非常感谢@farahm。如果是那样的话,我会写一个答案。我真的很感激你,你很慷慨。你看到我在之前的评论中提到的关于最大年龄信息格式的SO问题了吗?也许不是,但可能有关联。抱歉@farahm。我刚刚意识到你的评论,因为你没有提到我,所以没有提醒我。无论如何,我很抱歉。是的,当然,如你所愿。同一时间?大约CET时间23:00?