Oauth 2如何防止移动应用程序中的重放攻击?

use*_*146 8 mobile oauth replay

这个问题已经出现了很多,但我还没有找到答案.我已经阅读了OAUTH 2规范和单独的安全性"注意事项"文档,但我仍然对某些事情感到模糊.

情况是:移动应用程序访问基于RESTful的Web服务.我既是服务器资源(RESTful服务的创建者和主机),也是授权机构(我存储用户的ID和密码并验证身份).第三方公司创建使用我的服务的移动应用程序.我正在使用OAuth 2.0验证用户的UserID和密码并发出令牌.使用TLS通过https.

带有烧录消息的随机数通常用于防止重放攻击,但据我了解,这在移动应用程序中不起作用,因为为了签名消息,您需要共享密钥.存储在移动应用上的任何秘密(允许您签署消息)都不再是秘密.所以不能使用nonce.

所以我们有会话令牌,它在一段可配置的时间段后到期,并且可以用"刷新令牌"刷新.

我的问题是:如果TLS被击败(例如:用户愚蠢到足以将他们的手机连接到代理服务器并安装代理证书,然后允许代理服务器所有者读取未加密的流量),什么阻止了黑客用有效的会话令牌重放请求(当它仍处于活动状态时),或者更糟糕的是,使用刷新令牌一次持续几个小时来连续获取新的会话令牌?

Nei*_*ine 2

您建议的情况是一种安全性被击败并且没有安全性的情况。代理可以执行诸如在身份验证期间窃取用户密码或将访问令牌转移到另一个应用程序(本地或远程)等操作。您必须将这种情况视为一种损失。

此外,移动应用程序通常具有共享秘密。正如您所指出的,秘密在客户端上会失去一些安全性,但它仍然比没有好。该秘密通常在静态时进行加密,以防止其轻易被窃取。当然,即使应用了混淆技术,解密密钥也可能从应用程序中被盗,但它提供了一定的安全性。

请务必限制客户端上机密的访问权限。确保它没有配置为 2 足身份验证。应该为服务器保存这些信息,并且仅在需要时才保存。