Node.js http основной аутентификации - PullRequest
14 голосов
/ 08 сентября 2011

Можно ли выполнить базовую аутентификацию в Node.js, как в Apache?

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

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

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

Это то, что я могу сделать, но я не уверен, достаточно ли безопасны «разоблачение» или непосредственное написание пользователя и пароля в коде.

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

Ответы [ 4 ]

17 голосов
/ 10 октября 2012

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

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

  • npm, установка passport-http (содержит "BasicStrategy"объект для базовой аутентификации)

  • Откройте ваш 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);
    
12 голосов
/ 05 марта 2013

Поместите

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

перед строкой

app.use(app.router);

, чтобы защитить все маршруты с помощью http basic auth

3 голосов
/ 22 апреля 2016

Я думаю, что хорошим выбором может быть 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 + "!");
});
3 голосов
/ 08 сентября 2011

Посмотрите: библиотеки аутентификации пользователя для node.js?

Он не отвечает на ваш вопрос на 100% - но, возможно, это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...