当前位置: 首页 > 知识库问答 >
问题:

在android应用程序上存储client_id和client_secret的安全方法

东方涛
2023-03-14

在我的应用程序中,我需要传递client_id和client_secret来进行API调用。

在Android应用程序上存储客户端id和客户端机密最安全的方法是什么?

我已经读到了共享引用,我确信它们不安全。也可以阅读Keystore,但不确定这是否是正确的方法。您能建议一下存储此类信息的最安全方式吗?

谢谢R

共有2个答案

万俟渊
2023-03-14

最好的方法是使用Android的密钥库。它将为您处理密钥生成和存储。您的应用程序将通过KeyChain API进行通信,该API具有以下优点:

  • 它为您执行所有加密操作

在钥匙链中保护用户的秘密

相野
2023-03-14

在我的应用程序中,我需要传递client_id和client_secret来进行API调用。

在我看来,您的移动应用程序中没有使用正确的OAuth授权流,因为您现在使用的应用程序需要client\u secret。我认为您可能正在尝试使用用于m2m(机器对机器)授权的流。

移动应用程序使用的正确流程是带有代码交换验证密钥(PKCE)的授权代码流程。

来自auth0。com/docs:

PKCE增强的授权码流引入了一个由调用应用程序创建的可由授权服务器验证的秘密;这个秘密叫做代码验证程序。此外,调用应用程序创建名为“代码挑战”的代码验证程序的转换值,并通过HTTPS发送该值以检索授权代码。这样,恶意攻击者只能截获授权代码,并且在没有代码验证程序的情况下无法将其交换为令牌。

您可以阅读到这是OAuth 2.0 RFC8252 for Native Apps中推荐的方法,这是关于移动应用的最佳实践:

来自本机应用的OAuth 2.0授权请求只能通过外部用户代理(主要是用户的浏览器)发出。本规范详细说明了出现这种情况的安全性和可用性原因,以及本机应用程序和授权服务器如何实现这种最佳实践。

这份备忘录记录了互联网最佳当前实践。

本文件是互联网工程任务组(IETF)的产品。它代表了IETF社区的共识。它已经得到了公众的审查,并已被互联网工程指导小组(IESG)批准出版。有关BCP的更多信息,请参见RFC 7841第2节。

有关本文件的当前状态、任何勘误表以及如何提供反馈的信息,请访问https://www.rfc-editor.org/info/rfc8252.

在Android应用程序上存储客户端id和客户端机密最安全的方法是什么?也可以阅读Keystore,但不确定这是否是正确的方法。您能建议一下存储此类信息的最安全方式吗?

是的,Android密钥库是正确的选择。你可以从Android安全库中使用它来存储你的秘密,但请记住,攻击者可以使用检测框架在运行时钩住使用已解密的client_idclient_secret的代码,并提取它们以供在移动应用程序之外使用。用于本提案的一个流行的仪器框架是Frida:

将自己的脚本注入黑盒进程。钩住任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击save,立即查看结果。所有这些都没有编译步骤或程序重新启动。

我邀请您阅读我对Android安全存储客户端证书和密钥(.pem)问题的回答,以了解有关在安全库中使用Android密钥库的更多详细信息,答案包括一些代码示例。

在回答安全问题时,我总是喜欢引用OWASP基金会的优秀作品:

OWASP移动安全项目-十大风险

OWASP移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。

OWASP-移动安全测试指南:

移动安全测试指南(MSTG)是移动应用安全开发、测试和逆向工程的综合手册。

 类似资料: