Работали ли вы с Passport.js для аутентификации в Node.js?

«Работали ли вы с Passport.js для аутентификации в Node.js?» — вопрос из категории Безопасность, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, использовал Passport.js в нескольких проектах на Express. Это middleware для аутентификации, которое поддерживает множество стратегий через плагины.

Чаще всего применял:

  • Local Strategy для аутентификации по логину/паролю
  • JWT Strategy (passport-jwt) для stateless-аутентификации в REST API
  • OAuth2 стратегии для интеграции с Google, GitHub

Пример настройки JWT стратегии:

const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;

const opts = {
  jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
  secretOrKey: process.env.JWT_SECRET
};

passport.use(new JwtStrategy(opts, async (jwt_payload, done) => {
  try {
    const user = await User.findById(jwt_payload.sub);
    if (user) {
      return done(null, user);
    }
    return done(null, false);
  } catch (err) {
    return done(err, false);
  }
}));

Защита роута:

app.get('/profile', passport.authenticate('jwt', { session: false }), 
  (req, res) => {
    res.json({ user: req.user });
  }
);

Основное преимущество Passport.js — единообразный интерфейс для разных стратегий аутентификации и хорошая интеграция с Express middleware.