2015-04-12 77 views
0

我一直在调查这几天,并遇到很多SO问题,但我仍然不太确定。内部REST API安全

我正在用Node.js创建一个REST API,它将用于Web应用程序和移动应用程序,该应用程序仅用于应用程序的后端而不用于其他开发人员。

我目前的担心是安全我知道还有其他方式,如OAuth等,但我想知道如果我目前的方法是足够安全的。

“客户端”使用Node中的crypto.createHmac('text', 'secret');方法创建HMAC-SHA1令牌,该方法包含一个API密钥和一个秘密。秘密内置于代码中,而当用户登录该应用程序时,先前已从数据库中检索到API密钥。客户端然后发送此令牌以及用户ID。

然后,REST服务器检索已发送的用户ID的API密钥,然后使用刚刚检索到的API密钥和秘密创建HMAC-SHA1标记。然后它检查它们是否相同,然后继续处理请求。

我不介意它是否“重新发明轮子”或其他什么,它更多的是体验。如果这种方法不安全,我想知道为什么。

+0

我不确定HMAC步骤甚至是必要的。除非您期望入侵者能够窃听您可能加密的服务器到服务器通信,为什么不将您的共享密钥和API令牌作为消息的一部分发送? –

+0

@AndrewLavers是的,我想知道是否需要hmac,这只是我在研究时看到的几次弹出。只是这个话题非常有见地,而且很难找到真正需要的内容,而不是过度警惕。 – Emobe

+0

@AndrewLavers虽然我很想知道它会被移动应用程序访问,但他们能够读取共享密钥吗? – Emobe

回答

3

没有客户端设备的物理安全性(即:您拥有硬件),没有完美的安全性。拥有客户端设备的人总是能够找到你的秘密,所以不要太担心。使用您的HMAC来掩盖网络代理的秘密。

即使使用OAUTH,客户端密钥也可能被盗用。

您可以通过要求验证为用户提供安全性。听起来你已经这么做了。所以我认为你很好。

也就是说,作为一般规则,我更喜欢使用现有的协议和库,而不是实现自己的协议和库。他们往往有更安全的实施。