我正在开发一个REST服务,它有几个要求:
- 必须是安全的。
- 用户不应该能够伪造请求。
我目前提出的解决方案是使用一个自定义的授权头部,形式如下(这与亚马逊Web服务的方式相同):
Authorization: MYAPI username:signature
我的问题是如何生成签名。当用户登录服务时,他们会获得一个密钥,可以用于对请求进行签名。这将阻止其他用户代表他们提交请求,但不能阻止他们伪造请求。
将使用此服务的应用程序是一款iPhone应用程序,因此我在考虑我们可以在应用程序中嵌入一个公钥,以便我们可以进行额外的签名,但这是否意味着我们需要有两个签名,一个是用户密钥,另一个是应用程序密钥?
任何建议都将不胜感激,我希望第一次就做到正确。