Угловой 2/4, где хранить токен

У меня есть rest api для генерации токена, который я использую в угловой стороне 4 клиента, но вопрос в том, где хранить этот токен.

В Интернете я обнаружил, что могу хранить в локальном хранилище или в cookie.

Поэтому мой вопрос заключается в том, что если токен хранилища является локальным хранилищем, и я только что скопировал действительный токен из другого браузера, тогда у меня будет действительный токен, так что есть какая-то безопасность хранения токена, подобного этому, и в основном тот же с печеньем или, может быть, я пропустил какую-то важную информацию?

Ответ 1

Вот полная статья о Tokens/Cookies, которая может дать вам много знаний об этой теме: auth0: Cookies VS Tokens

Я процитирую наиболее важные части, чтобы вы поняли, что будет дальше:

Двумя наиболее распространенными атакующими веб-сайтами являются веб-скрипты (XSS) и кросс-сайты (CSRF).

Cross Site Scripting), когда внешний объект может выполнять код на вашем веб-сайте или в приложении.

Атрибуты Cross Site Request Forgery не являются проблемой, если вы используете JWT с локальным хранилищем. С другой стороны, если ваш случай использования требует, чтобы вы хранили JWT в cookie, вам необходимо защитить от XSRF.

Наш технический директор в прошлом утверждал, что атаки XSS намного легче справляться с атаками XSRF, потому что их в целом лучше понять.

Так что в основном подвести итог:

  • XSS атаки проблема с токенов и LocalStorage. Но это не потому, что Угловая дезинфицирует все, предотвращая эффективные атаки XSS. (https://angular.io/guide/security#angulars-cross-site-scripting-security-model)
  • Атаки XSRF - это проблема с Cookies, и вам придется настроить свою собственную систему безопасности, чтобы справиться с ними.

Следовательно, я бы рекомендовал стандартный подход JWT Token для управления вашим токеном. Поскольку ваш токен подписан с использованием формата JWT, это, на мой взгляд, самое безопасное решение. Конечно, стандартный токен должен быть зашифрован или подписан (не тот же), чтобы быть действительно безопасным.

На самом деле легко настроить и управлять соответствующими библиотеками (например, https://github.com/auth0/angular2-jwt)


Чтобы идти дальше: я предполагаю, что ваш токен будет использоваться для аутентификации, и имейте в виду, что люди уже работали с этим и знают, что это хорошая/плохая практика, использующая их.

Вы должны посмотреть, как управлять аутентификацией с рабочих сайтов (таких как Twitter/Facebook и т.д.), Где они используют Refresh Tokens. Вот некоторые дополнительные ссылки, которые могут вас заинтересовать:


EDIT: дополнительные ссылки на лучшие практики с JWT:

Ответ 2

Его больше о том, как вы собираетесь его проверять, чем то, как вы храните токен, какие майоры безопасности вы предприняли для проверки их на стороне сервера.

Вы должны убедиться, что запрос поступает от действительного клиента, а не от вредоносного источника, если у вас есть API с поддержкой CORS.

Если вы используете токен для хранения информации о конфеденциальности, вам необходимо зашифровать его перед сохранением.

Надеюсь это поможет!!