Ответ 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: