这个问题已经出现了很多,但我还没有找到答案。我已经阅读了 OAUTH 2 规范和单独的安全“注意事项”文档,但我仍然对某些事情感到模糊。
情况是:移动应用程序正在访问基于 RESTful 的 Web 服务。我既是服务器资源(RESTful 服务的创建者和宿主)又是授权机构(我存储用户的 ID 和密码并验证身份)。第三方公司创建使用我的服务的移动应用程序。我正在使用 OAuth 2.0 来验证用户的用户 ID 和密码并颁发令牌。使用通过 https 的 TLS。
带有签名消息的随机数通常用于防止重放攻击,但据我了解,这在移动应用程序中不起作用,因为为了签署消息,您需要一个共享密钥。存储在移动应用程序上的任何秘密(允许您签署消息)不再是秘密。所以不能使用nonce。
所以我们有会话令牌,它会在一些可配置的时间段后过期,并且可以使用“刷新令牌”进行刷新。
我的问题是:如果 TLS 被击败(例如:用户愚蠢到将他们的手机连接到代理服务器并安装代理证书,然后允许代理服务器所有者读取未加密的流量),是什么阻止了黑客使用有效的会话令牌(当它仍然存在时)重播请求,或者更糟糕的是,使用刷新令牌一次将会话保持数小时以不断获取新的会话令牌?