这个问题已经出现了很多,但我还没有找到答案。我已经阅读了OAUTH 2规范和单独的安全性“注意事项”文档,但我仍然对某些事情感到模糊。
情况是:移动应用程序正在访问基于REST的Web服务。我既是服务器资源(RESTful服务的创建者和主机),也是授权机构(我存储用户的ID和密码并验证身份)。第三方公司创建使用我的服务的移动应用程序。我正在使用OAuth 2.0验证用户的UserID和密码并发出令牌。使用TLS通过https。
带有烧录消息的随机数通常用于防止重放攻击,但据我了解,这在移动应用程序中不起作用,因为为了签署消息,您需要共享密钥。存储在移动应用上的任何秘密(允许您签署消息)都不再是秘密。所以不能使用nonce。
因此我们有会话令牌,它在一段可配置的时间段后到期,并且可以使用“刷新令牌”刷新。
我的问题是:如果TLS被击败(例如:用户愚蠢到将他们的手机连接到代理服务器并安装代理证书,然后允许代理服务器所有者读取未加密的流量),是什么阻止黑客用有效的会话令牌重放请求(当它仍处于活动状态时),或者更糟糕的是,使用刷新令牌一次持续几个小时来连续获取新的会话令牌?
答案 0 :(得分:2)
您建议的情况是安全失败并且没有安全措施。代理可以执行诸如在身份验证期间窃取用户密码或将访问令牌转移到另一个应用程序(本地或远程)的操作。您必须接受这种情况作为损失。
此外,移动应用通常具有共享密钥。正如你所指出的那样,秘密在客户端失去了一些安全性,但它总比没有好。秘密通常在休息时加密,以防止它被轻易被盗。当然,即使应用了混淆技术,解密密钥也可以从应用程序中窃取,但它提供了一定的安全性。
请务必限制客户端上密码的访问权限。确保未配置为双腿认证。应该只在需要时为服务器保存。