Невозможно прочитать готовить ie на JS стороне в Safari / iPhone - PullRequest
0 голосов
/ 22 апреля 2020

Вот рабочий процесс:

  • Я отправляю электронное письмо клиенту. Это письмо содержит ссылку на мое приложение Angular: acme.com?token=abcd
  • Пользователь нажимает на ссылку в письме и перенаправляется на мое приложение.
  • Запрос GET выполнен. Заголовки этого ответа содержат Set-Cookie XSRF:12345
  • Затем, после ответа GET, выполняется запрос POST, предположительно с использованием предыдущего токена XSRF.

Проблема : в Safari / iPhone (и только в Safari / iPhone, работает в Safari / Ma c), повар ie не виден на стороне JS.

Напоминаем, что XSRF cook ie предназначен для чтения в JS и повторной вставки в заголовки HTTP последующих запросов POST / PUT / DELETE. В результате запрос POST отправляется без заголовка XSRF (но с обработкой XSRF ie) и заканчивается ошибкой 403. Все работает так, как будто повар ie был HttpOnly, но это не так!

Вот полная информация о Set-cookie:

Set-Cookie: XSRF=[...]; Expires=Thu, 23-Apr-2020 16:07:10 GMT; Path=/;SameSite=Strict;Secure

Я подозревал проблемы с SameSite политика, потому что пользователь заходит на сайт после нажатия на ссылку в электронном письме. Итак, я попытался добавить отскок: после нажатия пользователь теперь попадает на страницу acme.com/redirect.html?token=abcd, которая перенаправляет на acme.com?token=abcd (через window.location.href=...)

На самом деле, это работает ... но я не понимаю почему . Если это была проблема SameSite, почему бы XSRF cook ie по-прежнему отправляться? И, поскольку он не помечен как HttpOnly, почему я не могу прочитать его на стороне JS? Есть ли способ в Safari выяснить, почему повар ie отклонен? Кроме того, я обнаружил, что в некоторых версиях Safari могут быть ошибки с обработкой cook ie. Есть ли способ деактивировать политику SameSite в Safari / iPhone, чтобы понять, происходит ли она оттуда?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...