В № 5, № 46 и большинстве обсуждений в Интернете люди, похоже, по умолчанию используют локальное хранилище / хранилище сеансов для JWT, а не в cookie. Для этого необходимо использовать AJAX во всем приложении, чтобы заголовок можно было каждый раз устанавливать из веб-хранилища. Насколько я понимаю, это сделано для предотвращения подделки межсайтовых запросов (и, по сути, для этого используется политика одного и того же происхождения).
Как это сочетается с прогрессивным улучшением, когда некоторые устройства вообще не поддерживают javascript?
_Another_ _GREAT _ Вопрос от _Wizard_! : +1:
В этом микро-примере я думаю, что "_Ok_" использовать localStorage
.
Давайте будем честными, в наши дни все используют React, не заботясь о доступности.
Все крутые ребята _ гораздо_ больше заинтересованы в _Shiny New Frameworks_, чем _Progressive Enhancement _...
Тем не мение...
В нашем _actual_ приложении мы используем cookies
_precisely_ для обратной совместимости и прогрессивного улучшения.
Вот почему мы добавили опцию в JWT2 ... см .: https://github.com/dwyl/hapi-auth-jwt2#want -to-sendstore-your-jwt-in-a-cookie
Итак, в заключение: я бы добавил localStorage
к примеру в этом репо и добавил comment
информирующий людей, что использование файлов cookie для хранения JWT - это "_Ohkay_", потому что вы по-прежнему получаете всю _горизонтальную масштабируемость_ и безопасность. преимущества использования JWT при сохранении _effort_ необходимости устанавливать / получать JWT и добавлять его в заголовки при каждом запросе ...
@rjmk и @nelsonic
есть ли конкретная причина, по которой JWTS, хранящиеся в локальном хранилище, должны быть отправлены в заголовках, или есть что-то уязвимое / "неправильное" в использовании https://www.npmjs.com/package/node-localstorage?
@Jbarget , вы создаете "_Universal_", который требует, чтобы у вас был доступ к localStorage
на сервере? Если это ваш вариант использования, то модуль node-localstorage
будет служить вашей цели.
_Однако_ вам все равно придется _ вручную_ отправлять JWT в header
чтобы отправить его обратно на сервер в запросах "AJAX" ... так что нет большого преимущества в использовании _module_, если все, что вы хотите сделать получить / установить токен в / из localStorage
...
@nelsonic, мы, вероятно, в конечном итоге
@Jbarget есть ли у вас возражение против сохранения JWT в файле cookie? (_Это упрощает вашу жизнь ..._)
@nelsonic Нет возражений, правильно ли я считаю, что это упрощает мою жизнь, поскольку я могу получить доступ к файлам cookie из любого места в приложении, а не из локального / сеансового хранилища?
Это упрощает ваше приложение, поскольку после _установки_ файла cookie сервером _все_ отправленные / полученные запросы всегда будут содержать файл cookie. Это означает, что вам _ никогда_ не нужно _ думать_ об этом после этого момента.
Напротив, сохранение JWT в localStorage
означает, что у вас не может быть взаимодействия, отличного от ajax, и вы должны помнить SET
auth
заголовок
Не обязательно, хотя это зависит от вашего набора инструментов. Angular, например, позволяет вам установить это один раз .. я думаю, вы можете легко справиться даже с jquery.
$.ajaxSetup({
headers: { 'x-my-custom-header': 'some value' }
});
Другая проблема с файлами cookie в качестве транспортного уровня для токенов заключается в том, что вы используете 2 тайм-аута и не можете избежать проблем с CORS. Файлы cookie усложняют доступ к веб-службам RESTful. Намного проще создать curl one liner для доступа к ресурсу с помощью токена, чем объединение в cookie.
Этот выпуск автоматически закрывается, так как ему больше года. Не стесняйтесь открывать его повторно, если он по-прежнему актуален для вашего проекта.
Самый полезный комментарий
Не обязательно, хотя это зависит от вашего набора инструментов. Angular, например, позволяет вам установить это один раз .. я думаю, вы можете легко справиться даже с jquery.
Другая проблема с файлами cookie в качестве транспортного уровня для токенов заключается в том, что вы используете 2 тайм-аута и не можете избежать проблем с CORS. Файлы cookie усложняют доступ к веб-службам RESTful. Намного проще создать curl one liner для доступа к ресурсу с помощью токена, чем объединение в cookie.