当Android oauth 2.0 客户端应用程序具有硬编码的凭据(客户端 ID 和客户端密钥)时,很容易反编译应用程序并检索凭据。暴露客户端 ID 和 Secret
的后果是什么?
3 回答
我知道这不是一个好的 StackOverflow 答案,但我觉得无法比威胁模型和安全注意事项 (RFC 6819) 更好地解释它。所以这里是关于获取客户端密钥及其相关后果的段落。
请注意,Android 应用程序是公共客户端(更具体地说是本机应用程序),因此,正如您所说,无法对其凭据保密,但仍能够保护令牌和授权代码。
您的案例也很有趣的是有关智能手机的示例。
我知道 RFC 并不是最有趣的读物,但它们非常清楚。
据此,这是一个安全问题: http: //software-security.sans.org/blog/2011/03/07/oauth-authorization-attacks-secure-implementation
如果链接停止工作,下面是它所说的:
OAuth 对基于浏览器的授权的依赖性为默认情况下不在用户浏览器中运行的移动或桌面应用程序带来了继承实现问题。此外,从纯粹的安全角度来看,主要关注的是实施者何时在客户端应用程序本身中存储和混淆密钥/秘密组合。这使得密钥轮换几乎不可能,并允许未经授权访问存储消费者机密的反编译源代码或二进制文件。例如,要破坏 Android 上 Twitter 客户端的客户端凭据,攻击者可以简单地使用 Android 反汇编工具 dexdump 反汇编 classes.dex:
dexdump - d classes.dex
以上内容更详细,是一本非常棒的读物。
只是备注:客户端ID不是设计的秘密,所以实际上没有必要保护它。
请参阅RFC 6749(“OAuth 2.0 授权框架”)中的第 2.2 节:
客户端标识符不是秘密;它向资源所有者公开,不得单独用于客户端身份验证。