REST身份验证方案的安全性
问题内容:
背景:
我正在为REST Web服务设计身份验证方案。这并不是“真正”需要安全的(它更多是一个个人项目),但我想使其与练习/学习经验一样安全。我不想使用SSL,因为我不想麻烦,而在大多数情况下,它不需要设置它。
要解决这个问题:
S3和OAuth都依赖于对请求URL以及一些选定的标头进行签名。他们都没有在POST或PUT请求的请求主体上签名。这难道不容易受到中间人攻击,这种中间人攻击会保留url和标头,并用攻击者想要的任何数据替换请求正文?
似乎我可以通过在已签名的字符串中包含请求主体的哈希值来防范这种情况。这样安全吗?
问题答案:
先前的答案仅在数据传输的上下文中提到了SSL,实际上并未涵盖身份验证。
您真的在问有关安全认证REST API客户端的问题。除非您使用TLS客户端身份验证,否则单独使用SSL并不是REST API可行的身份验证机制。没有客户端身份验证的SSL仅对服务器进行身份验证,这与大多数REST API无关,因为您确实要对客户端进行身份验证。
如果您不使用TLS客户端身份验证,则需要使用基于摘要的身份验证方案(例如Amazon Web Service的自定义方案)或OAuth 1.0a甚至HTTP Basic身份验证(但仅通过SSL)。
这些方案验证请求是由预期的人发送的。TLS(SSL)(无客户端身份验证)可确保通过网络发送的数据保持不受干扰。它们是分开的,但又是互补的。