快速背景:
与REstful API服务器对话的完整Javascript SPA AngularJS客户端。我正在尝试为API服务器制定最佳身份验证。客户端将担任角色,并且我不担心用户是否可以看到客户端区域,因为服务器应该是气密的,因此不允许他们访问。
身份验证流程:
问题:
任何建议或示例,将不胜感激。
最佳答案
我目前正在使用angularjs + node作为REST API并通过HMAC进行认证的类似情况。
不过,我正在研究中,因此我的乐曲随时可能改变。这就是我所拥有的。任何愿意对此提出意见的人,我也欢迎:
Auth-Signature
:username
+ time
+ request.body
(在我的情况下request.body
是请求var的JSON.stringify()
'd表示形式)的HMAC用本地存储的密钥Auth-Username
:username
X-Microtime
:客户端生成其HMAC的unix时间戳X-Microtime
header ,并且如果X-Microtime
和now
之间的间隔大于10秒,则将请求丢弃为潜在的重播攻击,并返回401。Auth-Username
+ X-Microtime
+ req.body
。 Auth-Username
header 。 所有这些通信显然都打算通过HTTPS进行。
编辑:
在每次成功请求后,必须将密钥返回给客户端,以使客户端与动态密钥保持最新。这是有问题的,因为它基本上执行与cookie相同的操作。
您可以将密钥设置为静态并且永不更改,但这似乎不太安全,因为密钥永不过期。您还可以为每个用户分配一个密钥,该密钥将在登录时返回给客户端,但是无论如何您仍然必须对每个请求进行用户查找,此时最好只使用基本身份验证。
编辑#2
因此,在做完一些我自己的测试之后,我决定使用仍使用HMAC的REST API的后端代理。
这使我们可以将专用位保留在前端之外,同时仍允许我们构建一个API,该API可以快速进行身份验证,而无需对每个请求进行DB调用,并且保持无状态。它还允许我们的API服务于其他接口(interface),例如本地移动应用程序。移动应用程序将仅与私钥 bundle 在一起,并针对其每个请求运行HMAC序列。
关于javascript - AngularJS SPA和RestfulAPI服务器安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21540251/