Intereting Posts
Лучше передать полный объект или только требуемое значение в PHP (Symfony 2)? Добавление свойств к объекту с помощью ключей массива Модель OOP для PHP Framework Как создать ссылку на другую страницу PHP Создайте форму и сохраните данные во внешней БД с помощью WordPress Zend App на хосте без mod_rewrite и без виртуальных хостов интеграция формы sagepay – ошибка 3045 Как я могу прочитать метаданные PNG из PHP? Почему PHP XPath не находит элементы таблицы, хотя Firefox показывает, что они существуют? добавить символ в каждую строку в текстовом файле php Выходное изображение из образа Imagick в PHP Кратчайшая возможная кодированная строка с возможностью декодирования (сокращать URL) с использованием только PHP HTML5 и панель выполнения выполнения Javascript Выберите последний 20-й порядок по возрастанию – PHP / MySQL Ошибка API-интерфейса Google Translator Toolkit («Multipart должен иметь часть Atom и медиа»)

Лучший способ реализовать JWT?

Я создаю аутентификацию JWT, и у меня есть некоторые сомнения:

  1. для повышения безопасности, может быть хорошей идеей сохранить в базе данных токен пользователя и проверить, каждый раз, если токен, отправленный API, совпадает с тем, который был сохранен в базе данных? Это действительно полезно?

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

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

  4. лучше сохранить токен как cookie или веб-хранилище?

для повышения безопасности, может быть хорошей идеей сохранить в базе данных токен пользователя и проверить, каждый раз, если токен, отправленный API, совпадает с тем, который был сохранен в базе данных? Это действительно полезно?

Это полностью разрушает объект использования JWT. Преимущество JWT заключается в том, что вам не нужно отслеживать сеансы на стороне сервера – они чисто клиентские. Недостатком JWT является то, что вы не можете отменить токены из-за этого (цена, которую вы платите). Если вам нужна дополнительная безопасность, не используйте JWT и отслеживайте сеансы на стороне сервера, используя случайный токен (CSPRNG, 128 бит).

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

Ну, вы можете использовать идентификатор пользователя вместо электронной почты. Например, первичный ключ вашей таблицы пользователя. Затем, если они обновляют свою информацию, токен остается в силе. Вы должны установить короткие даты истечения срока действия, поэтому, если пользователь больше не является администратором, ему придется запросить новый токен (часто называемый токеном обновления), а новый токен не будет иметь требование администратора.

лучше сохранить токен как cookie или веб-хранилище?

Вам решать. Если он хранится в файле cookie, он отправляется с каждым запросом. Если вы хотите получить значение с помощью JavaScript, используйте веб-хранилище. Если вы используете cookie, установите флаг Secure, чтобы он не протекал через простой HTTP и флаг HttpOnly, чтобы защитить его от любых уязвимостей XSS в вашем домене. Веб-хранилище не может быть защищено от XSS таким же образом (вам нужно сделать все возможное, чтобы весь ваш домен был защищен), однако он менее вероятно, будет утечка через простой HTTP.

Как и в ответ от @SilverlightFox, обратите внимание, что вам может потребоваться проверка базы данных для обновления токенов, но не токенов доступа. Таким образом, вы можете настроить продолжительность, как вы хотите сделать компромисс безопасности и эффективности