Должен ли я получить токен доступа от sessionStorage для каждого запроса? - PullRequest
0 голосов
/ 10 июня 2018

Поэтому, когда я вхожу, мой бэкэнд возвращает мне токен, поэтому я сохраняю его как:

// var token is global
token = res.data.token;
sessionStorage.setItem("token", token);

И когда я выхожу из системы, я просто удаляю элементы из sessionStorage и сбрасываю переменную:

token = '';
sessionStorage.removeItem("token");

Затем во всех моих запросах я использую var для создания заголовка

{ headers: { "Authorization": "Bearer " + token } }

Но я не знаю, должен ли я хранить токен var или просто обращаться к хранилищу для каждого запроса, например:

{ headers: { "Authorization": "Bearer " + sessionStorage.getItem("token"} }

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

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

Перво-наперво - если вы загружаете ЛЮБОЙ Сторонний JS, не используйте локальное хранилище / хранилище сеансов для хранения каких-либо конфиденциальных данных, включая токены (я думаю, JWT s).Этот тип хранилища полностью незащищен;любой JS, работающий на вашей странице, может получить к нему доступ.Как только любой из сторонних сценариев будет скомпрометирован, то же самое случится и с вашим приложением (возможно, отправив все данные о пользовательских сеансах злоумышленнику).JWT в некоторой степени эквивалентен имени пользователя и паролю и должен обрабатываться как таковой.Используйте файл cookie secure httpOnly для передачи JWT s или сохранения данных сеанса на стороне сервера и сделайте токен подписанным файлом cookie сеанса.

Затраты на доступ к локальному / сессионному хранилищу весьма незначительны.Однако, если вы сильно беспокоитесь о производительности, загрузите токен в переменную (или какой-либо вид службы или хранилища) при инициализации приложения, создайте заголовок Authorisation, используя его, и обращайтесь к хранилищу только при изменении токена.

Кроме того, возьмите пик здесь:

https://dev.to/rdegges/please-stop-using-local-storage-1i04

https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

Надеюсь, это немного поможет: -)

0 голосов
/ 10 июня 2018

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

Если токен нужен только при выполнении ajax-вызова, не беспокойтесь о его получении из sessionStorage.Эта операция совсем не занимает много времени, конечно же, по сравнению с вызовом ajax.Вам нужно будет только кэшировать результат в переменной, если вы используете его в узком цикле, выполняющем тысячи операций (или, возможно, сотни тысяч), пока пользователь ждет их.Возможно, вы захотите указать ее в переменной по другим причинам (например, для удобства), но в описываемом вами случае аргумент эффективности отсутствует.

Общее правило: беспокоитесь о производительности, когда у вас естьпроблема производительности (но, вы знаете, не будьте полностью глупо делать вещи, которые, как вы знаете, ужасно неэффективны ...).: -)

...