Oauth 2.0:暴露客户端ID和客户端秘密,这是一个安全问题吗?

时间:2013-01-28 13:31:09

标签: android security oauth-2.0

Android oauth 2.0客户端应用程序具有其凭据(客户端ID和客户端密钥)时,硬编码非常容易反编译应用程序并检索凭据。
暴露客户端ID和秘密会产生什么后果?

3 个答案:

答案 0 :(得分:21)

我知道这不是一个好的StackOverflow答案,但我觉得不能比威胁模型和安全注意事项(RFC 6819)更好地解释它。所以这是关于获得Client Secret及其相关后果的段落。

请注意,Android应用程序是公共客户端(更具体的本机应用程序),因此,正如您所说,无法保密其凭据,但仍能够保护令牌和授权码。

您的案例也很有意思的是关于smartphones的例子。

我知道RFC并不是最有趣的读物,但这些都很清楚。

答案 1 :(得分:5)

据此,这是一个安全问题: 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

以上内容涉及更多细节,非常精彩。

答案 2 :(得分:1)

只是一句话:客户ID在设计上并不是秘密,所以实际上没有必要保护它。

请参阅section 2.2 in RFC 6749(" OAuth 2.0授权框架"):

  

客户端标识符不是秘密;它暴露给资源所有者,不得单独用于客户端身份验证。