Как объединить node express с поставщиками паспортов и jwt?

Я пишу одностраничное веб-приложение с помощью expressand react.
Теперь я пытаюсь выбрать способ аутентификации моих пользователей.
Я хочу позволить им зарегистрироваться и войти в систему с электронной почтой и паролем и сторонним поставщиком, таким как Facebook, Google и т.д.

Я читал некоторые статьи о passportand jwt(express-with-passport, jwt-with-passport), но ни одна из них не объединила jwtи стороннего поставщика.

Единственный способ, который я мог придумать, это сохранить токены в моей БД, и для каждого запроса сравнить их (токены, предоставленные третьей стороной и токены, созданные мной с помощью jwt)

Сохранение маркера от поставщика в моей БД и сравнение с каждым запросом имеет смысл, но с помощью jwtI just need to verify the token without access the db.
Как я могу отличить токены, которые я получаю от клиента? Как я могу сказать, когда получить доступ к БД (для токенов поставщика) и когда проверить использование jwt?

РЕДАКТИРОВАТЬ:

Способ реализации, о котором я думал, заключается в следующем:
— Имя пользователя и пароль: при входе в систему генерируйте токен (используяjwt) и отправляйте его клиенту. Каждый запрос будет содержать маркер, и сервер будет проверять его.
— Сторонний поставщик: предположим, что пользователь аутентифицируется Facebook. Мой сервер получает маркер (используя passport-js) от Facebook. Теперь мне нужно отправить клиенту свой токен. Я мог бы отправить маркер, который только что получил от facebook, но тогда как я могу проверить маркер, который клиент отправляет мне после каждого запроса?
Таким образом, я мог бы создать еще раз токен, используя jwtи работать так же, как описано выше.


Это хорошая реализация или я что-то упускаю? Я не мог найти
полное руководство, описывающее все эти аспекты.

1 ответ

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

    В БД можно сохранить метод аутентификации для данного пользователя (Facebook / Google / etc.) при входе в систему. Когда вы получаете запрос с недопустимым маркером, запросите этот метод проверки подлинности от БД, а затем перенаправьте их соответствующему поставщику удостоверений для повторной проверки подлинности.

    Это позволит избежать поиска БД для большинства «обычных» проверок JWT для вашего приложения и даст вам все преимущества без отслеживания состояния токена.