Как защитить JWT от XSRF, используя HTTPOnly Cookies?

У меня есть приложение Ionic / Angular 2, которое работает на localhost:8000 Приложение будет работать в конечном итоге на платформе браузера. Приложение вызывает API RESTFull, размещенный на моей локальной машине на https://adawy/api, где adawy мое имя хоста и определено в обоих hosts файл и в apache виртуальные хосты. Серверная сторона Slim 3.

API после аутентификации возвращает JWT для использования со всеми запросами.

Моя цель — защитить токен от подделки межсайтовых запросов и межсайтовых скриптов. Сохранение токена в переменной javascript или в любой форме локального хранилища сделает JWT доступным из javascript.

Я обнаружил, что лучший способ — вернуть JWT как файл cookie HTTPOnly. Поэтому он не будет доступен из javascript и будет отправлен только браузером с любыми предстоящими запросами adawy домен.

Я успешно вернул токен как файл cookie, но проблема в том, что файл cookie не отправляется ни с какими следующими запросами XHR.
введите описание изображения здесь

Кроме того, я не вижу cookie в разделе Cookies Devtools.

введите описание изображения здесь

Я знаю, что угловой может поддержать в этом вопросе, ища XSRF-TOKEN печенье.
Это также не работает, как вы можете видеть, я установил имя куки в XSRF-TOKEN но все же, с любым другим запросом, этот cookie не отправляется.

Интересно, как это было бы обеспечено, как если бы у angular был доступ к этому файлу cookie, как любой другой скрипт?

Вот следующий запрос, без куки. Пожалуйста, игнорируйте заголовок Authorization как мой угловой код устанавливает его напрямую.

введите описание изображения здесь

В моем угловом приложении я устанавливаю withCredentials: true возможность сделать последний запрос на получение.

Обновить
Я использовал adawy.com и у меня все еще та же проблема.

0

Решение

Первый ответ пытается явно установить куки в домене верхнего уровня Domain=.adawy; (см. Set-Cookie заголовок), что не допускается. Попробуйте установить его без домена, если можете, и посмотрите, работает ли он. В качестве альтернативы, попробуйте использовать имя хоста, на котором есть tld.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]