【问题标题】:basic authentication with Node.js and restify使用 Node.js 和 restify 进行基本身份验证
【发布时间】:2014-05-24 09:34:47
【问题描述】:

我目前正在使用 NodeJS 和 restify 开发一个 RESTful Web 服务。

我已为数据库使用 node-mysql 启动并运行所有内容,但我还想实现 HTTP 基本身份验证。

我只用 Apache 和 .htaccess 文件做过一次。

但是这里的网络服务器带有restify,我这样启动它:

var server = restify.createServer({
  name: 'my webservice'
});

restify 文档 (http://mcavage.me/node-restify/#Bundled-Plugins) 中列出了一个身份验证解析器插件,但我不知道如何使用它。

req.username 的值始终设置为匿名,即使我使用 http://user:pass@url...

如果我可以将它与.htpasswd 文件一起使用来存储/访问用户并传递,那么最好的办法就是。

有谁知道如何用 restify 或其他模块来实现这个?

【问题讨论】:

    标签: javascript node.js basic-authentication restify


    【解决方案1】:

    最后我找到了一种不需要任何额外模块的方法。

    首先我发送正确的标头:

    var auth = req.headers['authorization'];
    res.statusCode = 401;
    res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"');
    res.end('need creds');
    

    然后我检查用户并通过,如果正常则发送正确的状态码

    res.statusCode = 200;  // OK
    

    如果密码不正确:

      res.statusCode = 401; // Force them to retry authentication
      res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"');
      res.end('<html><body>You shall not pass</body></html>');
    

    这很好用。我只是在阅读 .htpasswd 和加密密码时遇到了一些麻烦。 有谁知道如何根据 .htpasswd 文件检查纯密码?

    【讨论】:

    【解决方案2】:

    看看Passport.js。它支持Basic HTTP作为身份验证方案之一。

    【讨论】:

    • 看起来很有希望...我会试试看
    【解决方案3】:

    req.username 值始终设置为匿名,即使我使用 http://user:pass@url....

    文档似乎表明它需要标头中的凭据而不是 url,您可能需要使用 Curl 或浏览器以外的其他工具来制作带有授权标头的标头。

    【讨论】:

    • 好的...我认为即使我将它们放在 url 中,它们也会在标题中发送。
    • @nico - 我猜浏览器可能具有该功能,但您不能确定。我从来没有看到你在使用中显示的 url 格式。
    【解决方案4】:

    使用 express 你可以这样做:

    var auth = express.basicAuth(function(user, pass) {
        return (user == "admin" && pass == "1234");
    },'Super duper secret area');
    
    app.get('/test', auth, function(req, res){
        ...
    });
    

    expressjs.com

    【讨论】:

    • 我不想使用快递。它包含太多我不需要的内容......这就是我选择restify.js的原因
    猜你喜欢
    • 1970-01-01
    • 2015-08-12
    • 2017-06-13
    • 2013-05-30
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    相关资源
    最近更新 更多