Подтвердить что ты не робот

Node.js http basic auth

Можно ли выполнить базовый auth в Node.js, как в Apache?

http://doc.norang.ca/apache-basic-auth.html

Я знаю, что если я использую Express или Connect, я могу добавить функциональность промежуточного уровня и выполнить проверку пользователя, но я пытаюсь ограничить всю область (мне не нужно проверять подлинность пользователей из базы данных всего на пару определенных пользователей) - Я использую Ubuntu.

https://github.com/kaero/node-http-digest

Что-то я могу сделать, но я не уверен, что "разоблачение" или прямое написание пользователя и пароля в коде достаточно безопасно.

Большое спасибо.

4b9b3361

Ответ 1

Passport обеспечивает чистый механизм для реализации базового auth. Я использую его в своем приложении Node.js Express для защиты моего пользовательского интерфейса на основе Angularjs, а также моего RESTful API. Чтобы получить паспорт в вашем приложении, выполните следующие действия:

  • npm установить паспорт

  • npm install passport-http (содержит объект BasicStrategy для базового auth)

  • Откройте приложение app.js и добавьте следующее:

    var passport = require('passport')    
    var BasicStrategy = require('passport-http').BasicStrategy
    
    passport.use(new BasicStrategy(
      function(username, password, done) {
        if (username.valueOf() === 'yourusername' &&
          password.valueOf() === 'yourpassword')
          return done(null, true);
        else
          return done(null, false);
      }
    ));
    
    // Express-specific configuration section
    // *IMPORTANT*
    //   Note the order of WHERE passport is initialized
    //   in the configure section--it will throw an error
    //   if app.use(passport.initialize()) is called after
    //   app.use(app.router) 
    app.configure(function(){
      app.use(express.cookieParser());
      app.use(express.session({secret:'123abc',key:'express.sid'}));
      app.set('views', __dirname + '/views');
      app.set('view engine', 'jade');
      app.set('view options', {
        layout: false
      });
      app.use(express.bodyParser());
      app.use(express.methodOverride());
      app.use(express.static(__dirname + '/public'));
      app.use(passport.initialize());
      app.use(app.router);
      app.use(logger);
    });
    
    // Routes
    
    app.get('/', passport.authenticate('basic', { session: false }), routes.index);
    app.get('/partials/:name', routes.partials);
    
    // JSON API
    
    app.get('/api/posts', passport.authenticate('basic', { session: false }), api.posts);
    app.get('/api/post/:id', passport.authenticate('basic', { session: false }), api.post)
    // --Repeat for every API call you want to protect with basic auth--
    
    app.get('*', passport.authenticate('basic', { session: false }), routes.index);
    

Ответ 2

Поместите это

app.use(express.basicAuth(function(user, pass) {
  return user === 'test' && pass === 'test';
}));

до строки до

app.use(app.router);

для защиты всех маршрутов с помощью http basic auth

Ответ 4

Я думаю, что хорошим выбором может быть http-auth module

// Authentication module.
var auth = require('http-auth');
var basic = auth.basic({
    realm: "Simon Area.",
    file: __dirname + "/../data/users.htpasswd" // gevorg:gpass, Sarah:testpass ...
});

// Application setup.
var app = express();
app.use(auth.connect(basic));

// Setup route.
app.get('/', function(req, res){
  res.send("Hello from express - " + req.user + "!");
});