首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >保护我的Node.js应用的REST API?

保护我的Node.js应用的REST API?
EN

Stack Overflow用户
提问于 2012-02-03 04:39:07
回答 4查看 39.2K关注 0票数 68

我需要一些关于REST API的帮助。我正在写一个Node.js应用程序,它使用Express,MongoDB,并在客户端有Backbone.js。在过去的两天里,我一直试图解决所有这些问题,但没有太多的运气。我已经检查过了:

我想让我的后端和前端尽可能的分开,所以我想使用一个精心设计的REST API会更好。我的想法是,如果我有时间开发一个iPhone应用程序(或其他类似的应用程序),它可以使用API来访问数据。

但是,我希望这是安全的。用户已登录我的web应用程序,我希望确保我的API是安全的。我读过关于OAuth,OAuth 2.0,OpenID,Hmac,hashes等等的文章。我想避免使用外部登录(Facebook/Twitter等),我希望注册和登录是在我的应用程序/服务器上。

...but,我还是很困惑。也许现在已经是深夜了,或者我的大脑被烧焦了,但我真的需要一些步骤来告诉我该怎么做。创建安全API的步骤有哪些?

任何帮助,任何信息,任何例子,步骤或任何东西都是很好的。请帮帮我!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-03 17:08:04

这里有一种不同的思考方式:

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

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

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

像OAuth这样的系统的要点是提供这种“登录”方法,通常是从第三方应用程序或作为开发人员。对于iPhone或类似的应用程序来说,这可能是一个很好的解决方案,但那是未来的事情。API接受多个身份验证方法没有任何错误!

票数 29
EN

Stack Overflow用户

发布于 2012-02-03 05:59:50

按照安全性/复杂性递增的顺序:

基本HTTP身份验证

许多API库可以让你在里面构建它(比如Django中的Piston),或者你可以让你的let服务器来处理它。Nginx和Apache都可以使用服务器指令通过简单的b64encoded密码来保护站点。它不是世界上最安全的东西,但它至少是一个用户名和密码!

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

代码语言:javascript
复制
auth_basic "Restricted";
auth_basic_user_file /path/to/htpasswd;

(将其放入您的location /块中)

文档:http://wiki.nginx.org/HttpAuthBasicModule

您需要获取python脚本来生成该密码,并将输出放入一个文件中:http://trac.edgewall.org/browser/trunk/contrib/htpasswd.py?format=txt

文件的位置并不重要,只要Nginx可以访问它。

HTTPS

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

你可以用Nginx做到这一点,它的文档非常全面:http://wiki.nginx.org/HttpSslModule

一个自签名证书就可以了(而且是免费的!)。

API密钥

它们可以是您喜欢的任何格式,但如果您需要,它们可以为您提供撤消访问权限的好处。如果您正在开发连接的两端,则可能不是完美的解决方案。它们通常在有第三方使用API时使用,例如Github。

OAuth

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

考虑到您在进行两端的开发,将您的API放在基本的HTTP Auth后面并通过HTTPS提供它可能就足够了,特别是如果您不想浪费时间在OAuth上的话。

票数 39
EN

Stack Overflow用户

发布于 2014-07-28 03:21:03

到目前为止,这些答案解释得很好,但没有给出任何实际的步骤。我偶然看到了这篇博客文章,其中详细介绍了如何使用Node + Passport安全地创建和管理令牌。

http://aleksandrov.ws/2013/09/12/restful-api-with-nodejs-plus-mongodb/

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9119648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档