Java 存储客户端id的安全方法&x27;s和客户机密';android应用程序上的s

Java 存储客户端id的安全方法&x27;s和客户机密';android应用程序上的s,java,android,security,kotlin,android-security,Java,Android,Security,Kotlin,Android Security,在我的应用程序中,我需要传递client\u id和client\u secret才能进行API调用 在android应用程序上存储客户端id和客户端机密的最安全方式是什么 我已经阅读了共享参考,我确信它们不安全。还可以阅读有关密钥库的内容,但不确定这是否是正确的方法。您能建议一下存储此类信息的最安全方式吗 谢谢 R最好的方法是使用Android的。它将为您处理密钥生成和存储。您的应用程序将通过API进行通信,API具有以下优点: 它为您执行所有加密 难以从设备中提取 每个应用程序只能访问自己

在我的应用程序中,我需要传递client\u idclient\u secret才能进行API调用

在android应用程序上存储客户端id客户端机密的最安全方式是什么

我已经阅读了共享参考,我确信它们不安全。还可以阅读有关密钥库的内容,但不确定这是否是正确的方法。您能建议一下存储此类信息的最安全方式吗

谢谢
R

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

  • 它为您执行所有加密
  • 难以从设备中提取
  • 每个应用程序只能访问自己的密钥(由密钥库强制)

在密钥链中保护用户的机密

移动OAuth授权流 在我的应用程序中,我需要传递client_id和client_secret来进行API调用

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

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

发件人:

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

您可以阅读到,这是OAuth 2.0中针对本机应用程序的推荐方法,即关于移动应用程序的最佳实践:

摘要 只能从本机应用程序发出OAuth 2.0授权请求 通过外部用户代理,主要是用户的浏览器。这 规范详细说明了安全性和可用性方面的原因 本机应用程序和授权服务器如何实现 这是最佳做法

关于下段备忘 本备忘录记录了互联网最佳实践

本文件是互联网工程任务组的产品 (IETF)。它代表了IETF社区的共识。它有 已接受公众审查,并已获 互联网工程指导小组(IESG)。进一步资料 BCP可在RFC 7841第2节中获得

关于本文件当前状态的信息,任何勘误表, 关于如何提供反馈,请访问

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

是的,Android密钥库是正确的选择。您可以从中使用它来存储您的机密,但请记住,攻击者可以使用检测框架在运行时钩住使用已解密的
客户端id
客户端机密的代码,并将其提取出来供您的移动应用程序外使用。本提案中使用的一个流行的检测框架是:

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

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

你想多跑一英里吗? 在回答安全问题时,我总是喜欢引用OWASP基金会的优秀作品:

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

:

《移动安全测试指南》(MSTG)是一本关于移动应用程序安全开发、测试和逆向工程的综合手册


此答案探索了其他方便的选项,如使用
AccountManager
+一些加密,可能对您使用new安全管理密钥、加密文件和共享参考非常有用,如果ofc您想保存在共享参考中谢谢您将探索tham