基本authentication与Node.js和restify

我目前正在用NodeJS开发一个REST风格的Web服务并进行调整 。

我已经把所有的东西都和node-mysql一起运行,但是我也想实现HTTP基本authentication。

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

但是这里的Web服务器带有restify,我开始像这样:

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

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

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

最好的事情是,如果我可以用.htpasswd文件来存储/访问用户并传递。

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

最后,我find了一个没有任何额外模块的方法。

首先我发送correkt头文件:

 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文件的纯密码?

看看Passport.js 。 它支持基本HTTP作为authenticationscheme之一。

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

该文档似乎表明,它期望在标题中的凭据不在URL中,您可能需要使用curl或除浏览器之外的其他工具来制作带有授权标头的标题。

有了快递,你可以做这样的事情:

 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