如何确保客户端数据的完整性

时间:2014-02-05 21:36:27

标签: javascript rest client-side hmac

对于我们的Web应用程序,我们希望客户端尽可能地厚,并使我们的服务器尽可能地保持精简。我们的想法是为客户提供所有必要的数据,让用户在一个快速的Javascript应用程序(目前是GWT,但我们正在考虑转向Angular或Backbone)中与该数据进行交互。我们希望使服务器完全无状态,从而提高可扩展性和内存使用率。

一个基本问题当然是有一些数据不允许用户改变。例如,在进行密码重置过程时,用户无法更改其用户名,因为这样他就可以更改别人的密码。还有一个布尔值表示用户是否已通过验证码,我们不允许他将其设置为true。还可以想到许多其他例子。

我们想到的解决方案如下:与用户无法触摸的这些字符串(我们称之为特权信息)一起,我们还添加了一个签名。这只是在服务器上使用AES密钥签署的特权信息,HMAC的串联。当来自客户端的数据返回时,我们再次连接并签署信息,如果签名相同,我们知道客户端没有触及我们的信息。

我的问题:有没有人看到这个方案有任何缺点,任何人都可以指向可以找到更多关于这个主题的信息的资源(书籍,博客)?

1 个答案:

答案 0 :(得分:0)

对于几年后发现此问题的任何人:我建议的内容基本上与Json Web令牌(https://en.wikipedia.org/wiki/JSON_Web_Token)相同。我建议的想法是正确的,但是您当然应该使用已建立的库,而不要滚动自己的库。