Я создаю аутентификацию JWT, и у меня есть некоторые сомнения:
для повышения безопасности, может быть хорошей идеей сохранить в базе данных токен пользователя и проверить, каждый раз, если токен, отправленный API, совпадает с тем, который был сохранен в базе данных? Это действительно полезно?
чтобы избежать сохранения информации о пользователе в сеансе, хорошая идея ставит электронную почту, если он является администратором и т. д. в полезной нагрузке JWT?
если я сохраню информацию о пользователе в полезной нагрузке JWT, а пользователь изменит его электронную почту или другую информацию, как я могу автоматически обновить токен пользователя, сохраненный в его браузере?
лучше сохранить токен как cookie или веб-хранилище?
для повышения безопасности, может быть хорошей идеей сохранить в базе данных токен пользователя и проверить, каждый раз, если токен, отправленный API, совпадает с тем, который был сохранен в базе данных? Это действительно полезно?
Это полностью разрушает объект использования JWT. Преимущество JWT заключается в том, что вам не нужно отслеживать сеансы на стороне сервера – они чисто клиентские. Недостатком JWT является то, что вы не можете отменить токены из-за этого (цена, которую вы платите). Если вам нужна дополнительная безопасность, не используйте JWT и отслеживайте сеансы на стороне сервера, используя случайный токен (CSPRNG, 128 бит).
чтобы избежать сохранения информации о пользователе в сеансе, хорошая идея ставит электронную почту, если он является администратором и т. д. в полезной нагрузке JWT? если я сохраню информацию о пользователе в полезной нагрузке JWT, а пользователь изменит его электронную почту или другую информацию, как я могу автоматически обновить токен пользователя, сохраненный в его браузере?
Ну, вы можете использовать идентификатор пользователя вместо электронной почты. Например, первичный ключ вашей таблицы пользователя. Затем, если они обновляют свою информацию, токен остается в силе. Вы должны установить короткие даты истечения срока действия, поэтому, если пользователь больше не является администратором, ему придется запросить новый токен (часто называемый токеном обновления), а новый токен не будет иметь требование администратора.
лучше сохранить токен как cookie или веб-хранилище?
Вам решать. Если он хранится в файле cookie, он отправляется с каждым запросом. Если вы хотите получить значение с помощью JavaScript, используйте веб-хранилище. Если вы используете cookie, установите флаг Secure, чтобы он не протекал через простой HTTP и флаг HttpOnly, чтобы защитить его от любых уязвимостей XSS в вашем домене. Веб-хранилище не может быть защищено от XSS таким же образом (вам нужно сделать все возможное, чтобы весь ваш домен был защищен), однако он менее вероятно, будет утечка через простой HTTP.
Как и в ответ от @SilverlightFox, обратите внимание, что вам может потребоваться проверка базы данных для обновления токенов, но не токенов доступа. Таким образом, вы можете настроить продолжительность, как вы хотите сделать компромисс безопасности и эффективности