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

Mobile Oauth 2如何防止移动应用程序中的重播攻击?,mobile,oauth,replay,Mobile,Oauth,Replay,这个问题提了很多,但我还没有找到答案。我已经阅读了OAuth2规范和单独的安全“注意事项”文档,但是我仍然对一些东西不太清楚 情况是:移动应用程序可以访问基于RESTful的web服务。我既是服务器资源(RESTful服务的创建者和宿主),也是授权机构(我存储用户的ID和密码并验证身份)。第三方公司创建使用我的服务的移动应用程序。我正在使用OAuth2.0验证用户的用户ID和密码,并发出一个令牌。使用通过https的TLS 带有签名消息的nonce通常用于防止重播攻击,但据我所知,这在移动应用程

这个问题提了很多,但我还没有找到答案。我已经阅读了OAuth2规范和单独的安全“注意事项”文档,但是我仍然对一些东西不太清楚

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

带有签名消息的nonce通常用于防止重播攻击,但据我所知,这在移动应用程序中不起作用,因为要对消息签名,需要共享秘密。存储在移动应用程序上的任何秘密(允许您签署消息)都不再是秘密。所以暂时不能用

因此,我们有会话令牌,它在一段可配置的时间后过期,可以用“刷新令牌”刷新


我的问题是:如果TLS失败(例如:用户笨到可以将手机连接到代理服务器并安装代理证书,然后允许代理服务器所有者读取未加密的流量),是什么阻止黑客使用有效的会话令牌(当它还活着时)重播请求,或者更糟,使用刷新令牌一次持续会话数小时,以持续获取新会话令牌?

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

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


请确保限制客户端上机密的访问权限。确保它没有配置为2腿身份验证。根据我在OAuth上读到的内容,它实际上取决于您发行的令牌类型以及与之相关的参数。显然,限制令牌处于活动状态的时间是第一种防御措施。但也有MAC类型的令牌,它涉及在请求中使用nonce和MAC密钥来实现完整性。我认为重要的是不要依赖OAuth来实现安全性,并确保将其封装在具有强加密参数的SSL/TLS中。