Код: Выделить всё
@NotNull
private ResponseEntity getStringResponseEntity(HttpServletResponse response, UserDetails userDetails, Authentication auth) {
String accessToken = jwtService.getToken(userDetails);
String refreshToken = jwtService.getRefreshToken(auth.getName());
ResponseCookie cookie = ResponseCookie.from("refresh_token", refreshToken)
.path("/")
.maxAge(432000)
.httpOnly(true)
.secure(true) // only sends over HTTPS
.sameSite("None")
.build();
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());
return ResponseEntity.ok()
.header(HttpHeaders.AUTHORIZATION, "Bearer " + accessToken)
.header(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "Authorization")
.build();
}
- Бэкэнд: работает на «https://my-backend.ngrok.app»
- Внешний интерфейс: работает на «https://my-frontend.ngrok.app»
В мобильных браузерах файл cookie никогда не сохраняется и запросы не выполняются, если я полностью не отключу межсайтовые ограничения (SameSite).
Я пробовал:
sameSite("None") с безопасным (true)
Убедиться, что интерфейс и серверная часть подключены к HTTPS через Ngrok.
Вопрос:
Почему файл cookie токена обновления работает на настольном компьютере, но не на мобильном устройстве при использовании HttpOnly и SameSite=None?
Существуют ли ограничения для мобильных устройств на файлы cookie с межсайтовыми запросами в настройках Spring Boot + React?
Дополнительная информация:
React выполняет запросы с помощью Axios:
Код: Выделить всё
const API = axios.create({
baseURL: "https://my-backend.ngrok.app",
withCredentials: true
});
- Java 21
- Проверено на мобильных устройствах в iOS Safari.
Подробнее здесь: https://stackoverflow.com/questions/798 ... on-desktop
Мобильная версия