在我的应用程序中,我需要传递client_id和client_secret来进行API调用。
在Android应用程序上存储客户端id和客户端机密最安全的方法是什么?
我已经读到了共享引用,我确信它们不安全。也可以阅读Keystore,但不确定这是否是正确的方法。您能建议一下存储此类信息的最安全方式吗?
谢谢R
在我的应用程序中,我需要传递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_id
和client_secret
的代码,并提取它们以供在移动应用程序之外使用。用于本提案的一个流行的仪器框架是Frida:
将自己的脚本注入黑盒进程。钩住任何函数,监视加密API或跟踪私有应用程序代码,无需源代码。编辑,点击save,立即查看结果。所有这些都没有编译步骤或程序重新启动。
我邀请您阅读我对Android安全存储客户端证书和密钥(.pem)问题的回答,以了解有关在安全库中使用Android密钥库的更多详细信息,答案包括一些代码示例。
在回答安全问题时,我总是喜欢引用OWASP基金会的优秀作品:
OWASP移动安全项目-十大风险
OWASP移动安全项目是一个集中资源,旨在为开发人员和安全团队提供构建和维护安全移动应用程序所需的资源。通过该项目,我们的目标是对移动安全风险进行分类,并提供开发控制,以减少其影响或被利用的可能性。
OWASP-移动安全测试指南:
移动安全测试指南(MSTG)是移动应用安全开发、测试和逆向工程的综合手册。
我们正在使用OAuth2。0表示安全性。我在网上浏览了很多资源,每个人都在使用客户id、客户机密以及用户名和密码。但是我只想要client_id和client_secret,并且获得不带用户名和密码的访问令牌。 任何帮助将高度赞赏。
我已经阅读了以下教程:Vault配置 好的,我们安装了Vault服务器并放了2对秘密属性: Spring Boot应用程序具有以下属性(): 所以基于Spring。云金库令牌应用程序能够读取安全属性(名称和密码),但不能读取spring。云金库令牌存储在不安全的位置-
问题内容: 这与我以前的问题“ 每次安装时如何在Android模拟器上清除应用程序的localStorage?‘。 它还基于’ 如何清除Android应用程序缓存?’和’如何以编程方式清除应用程序数据?‘。 以上问题均未给出适用于Android PhoneGap / Cordova应用程序的简单答案。本博客文章由伊戈尔Hrupin涵盖在上下文的情况下 原生 Android应用程序,所以这个问题扩展
我有一个目录Android应用程序,我正在建设,以展示不同的目录从不同的本地商店。目录基本上是图像(JPG)格式的页面。我希望每个商店都有自己的活动,推出一个目录。 请救命!
这里存储JWT令牌: 谢谢你。