Токен аутентификации паспорта nodejs

Я пишу приложение nodejs, которое я хотел бы использовать как в качестве веб-приложения, так и в качестве поставщика API. После аутентификации пользователя я хочу назначить этому пользователю токен, который будет использоваться для последующих запросов. Это прекрасно работает с паспортом для веб-приложения, так как я просто сериализую и десериализирую пользователя с токеном в сеансе. Однако при ответе на запросы API отсутствует файл cookie, который можно установить для хранения информации о сеансе. В идеале, паспорт будет искать токен как в сеансе, так и в теле запроса. Есть ли способ настроить паспорт для достижения этой цели?

3 ответа

Решение

Просто используйте токен доступа при каждом запросе. Использование сеанса не требуется. Ниже приведен рабочий процесс:

POST /signin
  1. Имя пользователя и пароль публикуются в запросе клиента.
  2. Сервер аутентифицирует пользователя, используя локальную стратегию паспорта. Смотрите паспорт-местный.
  3. Если учетные данные представляют действительного пользователя, сервер возвращает токен доступа, сгенерированный каким-либо генератором. node-jwt-simple - это хороший выбор.
  4. Если учетные данные недействительны, перенаправьте на /signin,

Когда клиент получает токен доступа с сервера авторизации, он может отправлять запросы к защищенным ресурсам на сервере. Например:

GET /api/v1/somefunction?token='abcedf'

  1. Клиент вызывает некоторый серверный API с аргументом токена.
  2. Сервер аутентифицирует токен с использованием стратегии Bearer для паспорта. Смотрите паспорт-http-предъявителя.

Рекомендации

Создайте безопасный API oauth с помощью passport.js и express.js (node.js)

Как упоминает Bnuhero, вам не нужны сессии (хотя этот подход тоже имеет свои достоинства). Вот пример проекта, который я запускаю для этого: https://github.com/roblevintennis/passport-api-tokens

Вот альтернатива и легко следовать (но она использует сеансы). Может быть хорошая перекрестная ссылка: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local

И еще одна ссылка связана с: http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/

Вы можете использовать метод isAuthenticated() в паспорте в nodejs. На каждом маршруте вы можете проверить, если (req.isAuthenticated()) и если он уже аутентифицирован, он позволит вам получить доступ к маршруту или вы можете перенаправить или выполнить любое другое любое другое выполнение в блоке else. В Passport вы можете вернуть done (null, user) для успешного входа в систему, и он сохранит данные в файле cookie до окончания сеанса. в пользователь вы можете информацию о пользователе, как адрес электронной почты, пароль.

app.get('/home', (req, res) =>{
    if(req.isAuthenticated()){
        //render home page
    } else {
        // go back to the login page or throw soome error
    }
}) 
Другие вопросы по тегам