保护我的Node.js应用程序的RESTAPI?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

正在编写一个Node.js应用程序,它使用Express,MongoDB并在客户端有Backbone.js。我花了最后两天试图解决所有这些问题,并没有太多运气。

我想保持我的后端和前端尽可能分开,所以我想使用精心设计的REST API会很好。我的想法是,如果我总是开发一个iPhone应用程序(或类似的东西),它可以使用API​​来访问数据。

但是,我希望这是安全的。用户已登录到我的Web应用程序,我想确保我的API是安全的。我阅读了关于OAuth,OAuth 2.0,OpenID,Hmac,哈希等等......我想避免在(Facebook / Twitter /等)中使用外部日志记录我想注册并登录到我的应用程序/服务器上。

提问于
用户回答回答于

让我们假设你没有使用API​​。用户登录到应用程序,提供一些凭据,并且向用户提供某种类型的cookie或类似的令牌,用于识别该用户已登录。然后用户请求一个包含受限信息的页面(或者创建/修改/删除它),因此检查该令牌以确保用户被允许查看该信息。

现在,听起来你在这里改变的唯一方式就是信息传递的方式。将信息作为呈现的HTML提供,而不是将信息作为JSON返回并在客户端呈现。对服务器的AJAX请求将携带与以前相同的登录令牌,因此我建议只检查该令牌,并以相同的方式将信息限制为“允许用户允许知道的内容”。

API现在与登录一样安全 - 如果任何人想知道访问api所需的令牌,他们也将登录到该站点,并且无论如何都可以访问所有信息。最好的一点是,如果你已经实现了登录,你并不需要做更多的工作。

OAuth等系统的重点在于提供这种“登录”方法,通常来自第三方应用程序和开发人员。这对于iPhone应用程序或类似应用程序来说可能是一个很好的解决方案。接受多个验证方法的API没有错!

用户回答回答于

为了增加安全性/复杂性:

基本的HTTP验证

许多API库可以让你建立它(例如Django中的Piston),或者你可以让你的网络服务器处理它。Nginx和Apache都可以使用服务器指令来保护一个简单的b64编码密码的网站。这不是世界上最安全的东西,但它至少是一个用户名和密码!

如果使用的是Nginx,可以像这样在主机配置中添加一节:

auth_basic "Restricted";
auth_basic_user_file /path/to/htpasswd;

(把它放在你的location /区块中)

您需要获取python脚本来生成该密码并将输出放入一个文件中

只要Nginx能够访问它,文件的位置就不会太重要。

HTTPS

确保从服务器到应用程序的连接,这是最基本的,可以防止中间人攻击。

你可以用Nginx做到这一点,它的文档非常全面

这样的自签名证书会很好(并且免费!)。

API密钥

这些可以是任何你喜欢的格式,但是如果你需要的话,它们可以让你取消访​​问的好处。如果正在开发连接的两端,可能不是完美的解决方案。当你有第三方使用API​​时,他们往往会被使用,例如Github。

OAuth的

OAuth 2.0是在这里使用的。虽然我不知道规范的基本工作原理,但它现在是大多数身份验证(Twitter,Facebook,Google等)的事实标准,并且有大量的库和文档可帮助您实现这些规范。这就是说,它通常用于通过询问第三方服务进行身份验证来验证用户身份。

它足以将你的API放在Basic HTTP Auth后面,并通过HTTPS提供服务,特别是如果你不想浪费时间搞乱OAuth。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励