Angular полезно ли использовать будку повара ie или перехватчик для JWT? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть бэкэнд API, доступный только через аутентификацию. Это предлагается через JSON веб-токен (JWT), как только задана правильная пара учетных данных.

Теперь я разрабатываю внешний интерфейс для моего приложения, используя Angular 9. Вход в систему управляется auth.service, который возвращает JWT, если указаны правильные учетные данные.

После первого запроса к серверу (запрос на вход в систему) я установил перехватчик для вставка значения JWT в последующий запрос к API. Теперь один из моих коллег говорит, что мы должны хранить значение токена внутри cook ie в браузере.

Для меня я не вижу никаких причин делать это: зачем хранить учетные данные в браузере, если у нас уже есть наш перехватчик для проверки подлинности запросов?

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

JWT-токен, который используется для того, чтобы приложение Angular могло выполнять http-запросы, которые разрешены только для аутентифицированного пользователя.

Из-за этого вам понадобится JWT после аутентификации пользователя.

Затем, перехватчик полезен, чтобы увидеть, есть ли у HTTP-запроса JWT, прежде чем он будет выполнен, и если он не добавит его в HTTP-запрос.

Теперь возникает вопрос: Где я сохранил JWT в приложении, чтобы не запрашивать у пользователя аутентификацию каждый раз, когда вам нужно сделать HTTP-запрос к внутреннему серверу?

Там у вас есть два варианта: Локальное хранилище / хранилище сеансов (не рекомендуется из-за безопасности) и Cookies.

Большинство курсов или блогов Angular / Web показывают примеры использования локального / сеансового хранилища, но это не рекомендуется из-за проблем безопасности. Вот хорошее объяснение этого: https://dev.to/rdegges/please-stop-using-local-storage-1i04

Из-за этого лучшее место для хранения JWT - повар ie.

1 голос
/ 26 апреля 2020

Изменить

Я просто перечитал ваш вопрос еще раз, а вы вообще не упомянули localStorage. Поэтому, если ваш JWT хранится только в памяти, он будет потерян, когда вы обновите sh страницу, как сказал MikeOne в своем комментарии

Конец редактирования

Если вы уже используете localStorage, действительной причиной будет то, что вы планируете использовать angular universal для рендеринга на стороне сервера.

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

Это означает, что ответ сервера, возможно, перенаправит вас на страницу входа в систему, даже если вы уже вошли в систему, или вы можете кратко просмотреть версию страницы publi c, прежде чем подключенный пользователь будет отображать только содержимое клиента сторона

Что касается вопросов безопасности, взгляните на этот SO-ответ

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

Итак, есть несколько способов ответить на этот вопрос:

Все это немного сводится к безопасности. Таким образом, если вы храните свой токен JWT (который всегда должен быть недолговечными данными) в LocalStorage / SessionStorage или Cook ie.

Разница в том, что LocalStorage / SessionStorage может быть доступен из каждого javascript файла в вашем домене, что может создать проблему безопасности межсайтового скриптинга (XSS), если обрабатывается неправильно. Чтобы защитить себя от XSS, я бы посоветовал экранировать и кодировать все ненадежные данные.

Так что на самом деле ВСЕ коммуникации, которые идут от вашего интерфейса к вашему бэкэнду. В мире SPA это стандарт, который НИКОГДА не проверяет данные, поступающие с вашего веб-интерфейса, и ВСЕГДА проверяйте их в бэкэнде.

Для файлов cookie при использовании HttpOnly эти файлы cookie не могут быть доступны через JavaScript. Также убедитесь, что установлен флажок Secure, чтобы этот повар ie можно было отправлять только через HTTPS (без проблем). Конечно, у файлов cookie есть и проблемы с безопасностью, поэтому вам нужно защититься от подделки межсайтовых запросов (CSRF). Если вы хотите узнать больше об этом, прочитайте о добавлении XSRF-TOKEN в ваше требование JWT.

Короче, я бы также посоветовал go с файлами cookie вместо LocalStorage / SessionStorage.

Некоторые интересные чтения:

...