9

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

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

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

所以我们有会话令牌,它会在一些可配置的时间段后过期,并且可以使用“刷新令牌”进行刷新。

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

4

1 回答 1

2

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

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

一定要限制客户端上密钥的访问权限。确保没有为 2-legged auth 配置它。应该为服务器保存,并且仅在需要时保存。

于 2015-02-20T22:44:40.790 回答