Javascript AngularJS SPA和RestfulAPI服务器安全
快速背景: 与REstful API服务器对话的完整Javascript SPA AngularJS客户端。我正在努力为API服务器制定最佳身份验证。客户机将有角色,我不关心用户是否能看到客户机上不允许的区域,因为服务器应该是气密的 身份验证流程:Javascript AngularJS SPA和RestfulAPI服务器安全,javascript,angularjs,authentication,cookies,ssl,Javascript,Angularjs,Authentication,Cookies,Ssl,快速背景: 与REstful API服务器对话的完整Javascript SPA AngularJS客户端。我正在努力为API服务器制定最佳身份验证。客户机将有角色,我不关心用户是否能看到客户机上不允许的区域,因为服务器应该是气密的 身份验证流程: 用户发布用户名和密码,比如说/api/authenticate 如果有用户,服务器将生成api令牌(字段的sha散列或md5)和一些其他元数据,以确定要在1)post reply中传回的角色 令牌存储在会话cookie中(无exp、仅http、ss
- 用户发布用户名和密码,比如说/api/authenticate
- 如果有用户,服务器将生成api令牌(字段的sha散列或md5)和一些其他元数据,以确定要在1)post reply中传回的角色
- 令牌存储在会话cookie中(无exp、仅http、ssl)
- 身份验证后的每个请求都会获取cookie中的令牌,并验证这是用户
- 服务器上的SSL用户
- 这是保护服务器的最佳方法吗
- 我是否需要担心使用SSL的重播攻击?如果是这样,最好的管理方法是什么
- 我试图想出一种使用AngularJS实现HMAC安全性的方法,但我无法在javascript客户端上存储私钥
- 我最初使用http身份验证方法,但每次请求都发送用户名和密码似乎很奇怪
如有任何建议或示例,将不胜感激 我目前正在处理类似的情况,使用angularjs+节点作为REST API,使用HMAC进行身份验证 虽然我正处于这项工作的中间,所以我的曲调在任何时候都可能改变。这是我的想法。任何人愿意在这方面戳洞,我也欢迎:
- 密钥存储在nodejs内存中,每六个小时重新生成一次,并记录最后生成的密钥。在密钥更改后的10秒钟内,服务器实际生成两个HMAC;一个带新钥匙,一个带旧钥匙。这样,在密钥更改时发出的请求仍然有效。如果密钥更改,服务器会将新密钥发送回客户端,以便其可以在本地存储中对其进行闪存。密钥是使用节点UUID生成的UUID的SHA256,使用加密散列。输入后,我意识到这可能无法很好地扩展,但无论如何…
:使用本地存储的密钥签名的Auth Signature
+username
+time
(在我的例子中请求.body
是请求变量的request.body
'd表示形式)的HMACJSON.stringify()
:用户名Auth用户名
:客户端何时生成其HMAC的unix时间戳X-Microtime
X-Microtime
头,如果X-Microtime
和now
之间的间隔大于10秒,则将请求作为潜在的重播攻击丢弃,并抛出401Auth Username
+X-Microtime
+req.body
,使用节点内存中的6小时私钥Auth Username
标题