Если токен JWT для аутентификации сохранен в поварении только для HTTP ie, как вы читаете его из блюда ie, чтобы я мог включить его в заголовок запроса? - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю веб-приложение Node, используя JWT для аутентификации пользователя.

Мой сервер отправляет JWT в только по HTTP cook ie через 'Set-Cook ie', когда Пользователь отправляет правильный идентификатор и пароль, но я застрял на том, как получить доступ к этому JWT, хранящемуся в cook ie, чтобы я мог включить его в заголовок авторизации при выполнении авторизованных запросов API.

Как получить доступ HTTP-только готовить ie со стороны клиента, чтобы включить его при отправке запроса API на сервер?

Или было бы безопасно просто вообще не использовать cook ie, если сервер отправит JWT в теле ответа? Чтобы я использовал JWT, поместив его в переменную на стороне клиента? Таким образом, я считаю, что переменная остается активной, пока пользователь не закроет браузер.

Я искал много ресурсов, но не смог найти четкого ответа на этот вопрос, с которым я застрял.

1 Ответ

0 голосов
/ 19 апреля 2020

Хотя существует множество способов решения этой проблемы, я предложу метод, при котором клиент отправляет JWT дважды при каждом запросе: в HttpOnly cook ie, а также заголовок Authentication:.


Давайте рассмотрим, какую проблему безопасности решает каждый из них:

HttpOnly Cook ie

Из документации Mozilla :

Для предотвращения атак с использованием межсайтовых сценариев (XSS) файлы cookie HttpOnly недоступны для JavaScript Document.cook ie API; они отправляются только на сервер.

Это должно снизить риск межсайтового скриптинга; представьте, что на вашем сайте есть XSS - например, я могу добавить <script>some_code{..}</script> в комментарий, и любой пользователь, просматривающий мой комментарий, запустит мой код в своем браузере. Да, код злоумышленника выполняется внутри зарегистрированного браузера жертвы, но из-за флага HttpOnly он не может извлечь сессионный повар ie и отправить его злоумышленнику.

Заголовок аутентификации

Проблема с аутентификацией cook ie заключается в том, что браузер автоматически присоединяет их к любому запросу к домену, к которому принадлежит повар ie, это позволяет подделка межсайтовых запросов атаки. Чтобы предотвратить это, обычным способом является отправка токена сеанса (в вашем случае JWT) клиенту другим способом, отличным от cook ie, ie в другом заголовке или, возможно, в скрытом HTML field.

Если клиент может передать вам токен JWT при следующем запросе, это означает, что он смог прочитать предыдущий ответ и не является злоумышленником, выполняющим CSRF-атаку при слепом внедрении.


Общее предложение

Объедините два!

Два метода служат разным целям: файлы cookie HttpOnly защищают от атак XSS, а заголовки аутентификации защищают от атак CSRF.

Есть много способов их объединить, но все они сводятся к тому, чтобы поместить JWT в какой-то заголовок аутентификации и поместить sessionID в команду cook ie, а сервер должен проверить, что они принадлежат одному и тому же сеансу. , Важно: помните, что злоумышленник, достигший XSS на вашем сайте, сможет прочитать JWT, поэтому для повара ie, выполняющего свою работу, повар ie должен быть отдельным значением, которое не содержится в JWT , (ie если злоумышленник может определить правильное значение повара ie, посмотрев на JWT, то повар ie не обеспечивает никакой безопасности).

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