Токен аутентификации паспорта nodejs
Я пишу приложение nodejs, которое я хотел бы использовать как в качестве веб-приложения, так и в качестве поставщика API. После аутентификации пользователя я хочу назначить этому пользователю токен, который будет использоваться для последующих запросов. Это прекрасно работает с паспортом для веб-приложения, так как я просто сериализую и десериализирую пользователя с токеном в сеансе. Однако при ответе на запросы API отсутствует файл cookie, который можно установить для хранения информации о сеансе. В идеале, паспорт будет искать токен как в сеансе, так и в теле запроса. Есть ли способ настроить паспорт для достижения этой цели?
3 ответа
Просто используйте токен доступа при каждом запросе. Использование сеанса не требуется. Ниже приведен рабочий процесс:
POST /signin
- Имя пользователя и пароль публикуются в запросе клиента.
- Сервер аутентифицирует пользователя, используя локальную стратегию паспорта. Смотрите паспорт-местный.
- Если учетные данные представляют действительного пользователя, сервер возвращает токен доступа, сгенерированный каким-либо генератором. node-jwt-simple - это хороший выбор.
- Если учетные данные недействительны, перенаправьте на
/signin
,
Когда клиент получает токен доступа с сервера авторизации, он может отправлять запросы к защищенным ресурсам на сервере. Например:
GET /api/v1/somefunction?token='abcedf'
- Клиент вызывает некоторый серверный API с аргументом токена.
- Сервер аутентифицирует токен с использованием стратегии 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
}
})