#php #laravel #cookies #csrf
Вопрос:
Итак, мой API(laravel), например, работает https://api.example.com
, а на стороне клиента работает мой сайт http://127.0.0.1:3000
. API отправляет следующий файл cookie,
set-cookie: XSRF-TOKEN=eyJpdiI6IkVRSjcyYzBoVzRTazQ4RWJjK0JSd2c9PSIsInZhbHVlIjoiT20yb3AwZk1HemloaUl2MFZZdkUyUVM3Z3pXc3B0QXpiUEZPUEJIWElJYjRHamtlZ3d5NU5yb3doWmQ4ZXNBb1g0eTFiZXliRlFmWkN1SjVRMVFaM3pXK2x0MTMyK1MwTnp3cVZFSksvaVlJdGdLNGpKZXVrR3lITTRPU2VYNWgiLCJtYWMiOiI0MGU3NmEzYmI2NjY3MTkwNTNlMDQ2ZWRiNjVmNzdmYzA1MTMzOWE0NjA0YzAxYzBjZTczNzI4MDljOThhYTRmIn0=; expires=Wed, 30-Sep-2026 06:29:36 GMT; Max-Age=155520000; path=/; samesite=lax
Однако этот файл cookie не устанавливается браузером, так как он всегда пуст.
Я делаю запрос следующим образом:
axios.get("https://api.example.com/users")
В чем может быть проблема?
Комментарии:
1. Может быть, вы установили файл cookie в api.example.com домен?
2. если бы какой-либо сайт мог устанавливать файлы cookie в другом домене, то интернет-безопасность была бы лихорадочной мечтой сумасшедшего.
3. Так что, я думаю
SameSite
, должен бытьnone
@apokryfos, по крайней мере, в среде разработчиков?4. Даже если
SameSite
этоnone
так, файл cookie будет установлен дляapi.example.com
домена. Онhttps://api.example.com
не может устанавливать файлы cookiehttp://127.0.0.1:3000
иhttp://127.0.0.1:3000
не может считывать файлы cookie, установленныеhttps://api.example.com
. Если вы хотите поделиться токеном CSRF, вам нужно выполнить обычный запрос и поместить токен в тело ответа, где принимающий хост может затем сохранить его в файле cookie или локальном хранилище или где угодно. В этом случае будут отправлены любые файлы cookie,https://api.example.com
установленные в соответствии сSameSite
политикой asnone
.5. @apokryfos Спасибо, это помогает.