这个问题是关于尝试了解在Android等移动平台上实施oauth所涉及的安全风险。这里的假设是我们有一个Android应用程序,该用户程序在代码中嵌入了使用者密钥/秘密。
假设一个消费者的秘密已经被泄露,而黑客已经掌握了这个秘密,那么这将带来什么后果呢?
损害的消费者秘密假设
我是正确的,是说损害的消费者秘密本身不会影响用户的安全,也不会影响与用户进行交互的存储在启用OAuth的提供程序上的任何数据。数据本身不会受到破坏,黑客也无法检索。
黑客将需要持有有效的用户访问令牌,而这要难得多。
黑客如何处理受侵害的消费者秘密?
我也正确指出以下内容:
- 黑客可以设置/发布模仿我的应用程序的应用程序。
- 黑客可以吸引将要经过OAuth流程的用户,通过黑客的OAuth舞蹈(使用受害的用户密钥/秘密)检索访问令牌。
- 用户可能会认为他正在处理我的应用程序,因为他会在授权过程中看到一个熟悉的名称(用户密钥)。
- 当消费者通过黑客发出请求时,黑客可以轻松地拦截访问令牌,并且与消费者秘密结合在一起现在可以代表我对请求进行签名,以访问我的资源。
最终用户的影响
。在假设
- 黑客使用我的消费者秘密设置了应用程序/站点
- 我的一位用户被骗去授权访问该应用程序/站点
可能发生以下情况:
- 最终用户可能会注意到发生了一些可疑的情况,并将恶意应用告知服务提供商(例如Google)
- 然后,服务提供商可以撤消使用者密钥/秘密
OAuth使用者(我的应用程序)的影响:
我的应用程序(包含使用者的机密)将需要更新,否则所有我的客户将无法再授权我的应用程序代表他们的请求(因为我的使用者机密将不再有效)。
委派所有OAuth流量
尽管可以通过中间Web服务器委派许多OAuth交互(进行OAuth舞蹈并将访问令牌发送给用户),但也必须代理所有服务交互,作为使用者密钥/ secret是签署每个请求所必需的。这是将使用者密钥/秘密保存在移动应用程序外部并存储在中间Web服务器上更安全的位置的唯一方法吗?
替代
方案此代理有替代方案吗?是否可以将消费者秘密存储在中间Web服务器上,并且具有某种机制,使得Android应用程序(已在市场上发布并经过适当签名)可以对中间Web服务器发出安全请求,以获取消费者秘密并将其存储在应用内部?是否可以实施一种机制,使中间Web服务器“知道”这是一个要求获取用户机密的官方android应用程序,并且中间Web服务器将仅将用户机密分发给该特定android应用程序?