Node.js JWT токен - PullRequest
       28

Node.js JWT токен

0 голосов
/ 08 июня 2019

Я хочу сделать API в node.js, используя токен jwt.

  1. У меня есть пользователь, который входит в систему с логином и паролем, после успешного входа в систему я генерирую токен, который записываю в базу данных для этого пользователя.
  2. Если данный пользователь отправляет запрос, например, GET / basic-data Мне нужно сделать промежуточное ПО, которое проверит, совпадает ли токен в заголовке с токеном в базе данных.

Я правильно понял?

Ответы [ 2 ]

2 голосов
/ 08 июня 2019

Этот ответ нацелен только на то, как JWT обычно используется в веб-приложениях.Вы сказали:

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

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

Далее вы спросили:

Если данный пользователь отправляет запрос, например, GET / basic-data, мне нужно сделать промежуточное ПО, которое проверит, совпадает ли токен в заголовке с токеном в базе данных.

InВ идеальном мире вам нужно будет только проверять истечение срока действия (exp) заявок на входящий JWT для каждого запроса, чтобы решить, удовлетворять или нет запрос.Вам не нужно проверять базу данных.На практике вам, возможно, придется поддерживать кеш белого или черного списка JWT, но в идеале объем памяти любого кеша должен быть небольшим, а время доступа очень быстрым.

1 голос
/ 08 июня 2019

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

Чтобы проверить подлинность полезной нагрузки, вы можете написать политику, которая будет проверять токен при обращении к URL, а затем перенаправлять запрос для дальнейшей обработки.

Например, вы можете выгружать пользовательские данные в полезную нагрузку jwt при создании токена jwt, и как только вы получите токен в любом запросе, вы можете проверить, запрашивает ли ресурс аутентифицированный пользователь (например, user role = admin или продавец), заглянув в вашу базу данных пользователей. Политика будет работать здесь как промежуточное ПО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...