2013-10-05 37 views
3

我有一个API,建立与node.js的& express.js。现在我有一个不安全的API,任何人都可以GET,POST,PUT,DELETE记录。如何保护我的REST-API?

我面临以下问题。我的休息API不应该认证用户,但应用程序。例如。我的移动应用程序应该有一个有效的令牌来访问api。相同的Web应用程序。

另一个用户案例:我的API将只使用一个单一的REST调用其他应用程序使用。因此,在我不知道的应用程序中的某处(大部分情况下),会触发我api上的其余呼叫。我怎样才能保证这种访问,因为不涉及cookies或会话?

我的第一个想法是,创建一个用户和密码。每个API调用(通过https)都必须包含凭据。密码可能被散列。但是我读这

用户名和密码,会话令牌和API密钥在URL中不应该出现 ,因为这会导致Web服务器日志被捕获,并让他们 内在价值。

https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

对此有何建议?我阅读了oauth,但这涉及重定向,我无法想象这将如何与移动应用程序协同工作,例如在Android上。

回答

2

您可以使用此RSA加密,看看ursa模块节点。
使用这个过程的简化过程是...安排您的客户端应用程序使用公钥对服务器端的密码进行加密,并在服务器端使用私钥对其进行解密,检查密钥是否符合您的期望并采取相应措施。 。

有很多关于应用使用RSA的文章,我相信你将能够拿起如何工作的,如果你只是谷歌更明确的解释。

编辑
我刚才碰见this post这对这一问题作出更详细的写了。

2

有一个应用程序如何首先知道用户名/密码的问题,但如果您对一般想法(这是安全的,只要您考虑运行应用程序的环境为了安全起见),那么你不需要担心URL中的用户名/密码:只需使用https而不是https。

HTTPS加密,因此只有2个端点(客户端和您的API)可读取甚至URL。任何路由器/代理/服务器之间只能看到加密数据,并且无法访问您的用户名/密码。

取而代之的用户名/密码,顺便说一句,只需使用一个“访问令牌”,这是一个长期的(读:很难猜)字符串,并指定每个应用程序一个访问令牌。最后,您将有效令牌的列表保存在数据库中,并进行身份验证。如果您愿意,您甚至可以将有效期限附加到这些字符串。

将访问令牌作为https:// url的一部分添加是常见操作。