Node.js http 基本身份验证

发布于 2024-12-03 15:12:35 字数 431 浏览 0 评论 0原文

是否可以像在 Apache 中一样在 Node.js 中进行基本身份验证?

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

我知道如果使用Express 或 Connect 我可以添加中间件功能并进行用户验证,但我试图限制整个区域(我不需要从数据库中验证用户,只需几个定义的用户) - 我正在使用 Ubuntu 。

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

这是我可以做的事情,但我'我不确定“暴露”或直接在代码中写入用户和密码是否足够安全。

非常感谢。

Is it possible to do basic auth in Node.js just like in Apache?

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

I know that if using Express or Connect I can add middle-ware functionality and do user verification, but I'm trying to restrict the whole area (I don't need to authenticate users from a database just a couple of defined users) - I'm using Ubuntu.

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

That's something I can do, but I'm not sure if "exposing" or directly writing the user and password in the code is secure enough.

Many thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

久而酒知 2024-12-10 15:12:35

Passport 提供了一种干净的机制来实现基本身份验证。我在 Node.js Express 应用程序中使用它来保护基于 Angularjs 的 UI 以及 RESTful API。要在您的应用程序中启动并运行 Passport,请执行以下操作:

  • npm install Passport

  • npm install Passport-http(包含用于基本身份验证的“BasicStrategy”对象)

  • 打开您的 app.js 并添加以下内容:

    var 护照 = require('护照')    
    var BasicStrategy = require('passport-http').BasicStrategy
    
    护照.use(新的BasicStrategy(
      函数(用户名,密码,完成){
        if (username.valueOf() === '你的用户名' &&
          password.valueOf() === '你的密码')
          返回完成(空,真);
        别的
          返回完成(空,假);
      }
    ));
    
    // Express 特定的配置部分
    // *重要的*
    // 注意WHERE Passport初始化的顺序
    // 在配置部分——它会抛出一个错误
    // 如果之后调用 app.use(passport.initialize())
    // 应用程序.use(应用程序.路由器) 
    应用程序.配置(功能(){
      app.use(express.cookieParser());
      app.use(express.session({secret:'123abc',key:'express.sid'}));
      app.set('views', __dirname + '/views');
      app.set('视图引擎', '玉石');
      app.set('查看选项', {
        布局:假
      });
      app.use(express.bodyParser());
      app.use(express.methodOverride());
      app.use(express.static(__dirname + '/public'));
      app.use(passport.initialize());
      应用程序.use(应用程序.路由器);
      应用程序.use(记录器);
    });
    
    // 路线
    
    app.get('/',passport.authenticate('basic',{ session: false }),routes.index);
    app.get('/partials/:name', 路线.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)
    // --对您想要使用基本身份验证保护的每个 API 调用重复此操作 --
    
    app.get('*',passport.authenticate('basic',{ session: false }),routes.index);
    

Passport provides a clean mechanism to implement basic auth. I use it in my Node.js Express app to protect both my Angularjs-based UI as well as my RESTful API. To get passport up and running in your app do the following:

  • npm install passport

  • npm install passport-http (contains "BasicStrategy" object for basic auth)

  • Open up your app.js and add the following:

    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);
    
甜是你 2024-12-10 15:12:35

将其放在

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

to 行之前以

app.use(app.router);

使用 http basic auth 保护所有路由

Put this

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

before the line to

app.use(app.router);

to protect all routes with http basic auth

如若梦似彩虹 2024-12-10 15:12:35

看看:
node.js 的用户身份验证库?

它不回答你的问题100% - 但也许它有帮助。

Have a look at:
user authentication libraries for node.js?

It does not answer your question 100% - but maybe it helps.

策马西风 2024-12-10 15:12:35

我认为 http-auth 模块是不错的选择

// 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 + "!");
});

I think good choice could be 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 + "!");
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文