我在我的Android应用中使用OAuth 2登录。用户名和密码不存储在设备上。但是我在类Constants中的源代码本身中包含了三个字符串参数。
public class Constants{
public static String redirectUri = "http://someurl/users/me";
public static String clientId = "my-android-app";
public static String clientSecret = "asdfasf";
}
我在登录期间使用Constants.clientId访问这些参数。我的问题是我的数据存储方式是否安全?我是否必须加密这3个数据。我无法将这些数据存储在共享首选项或数据库中,因为在root设备中可以查看此数据。
答案 0 :(得分:1)
OAuth 2.0 Threat Model and Security Considerations(rfc6819)已将“获取客户机密”列为威胁。
正如Google doc使用OAuth 2.0 for Installed Applications所说:
这些应用程序分发到各台计算机,并假设这些应用程序无法保密。
事实上,没有客户“秘密”。试图在已安装的应用程序中混淆秘密是徒劳的,因为可以使用大量的逆向工程和调试工具来恢复机密。
当然,你应该尽力保护秘密,但最后,一个积极性高的黑客可以随时在已安装的应用程序中获取它。所以这是秘密与提取难度的价值。客户端密钥的值是模拟应用程序。它不提供对用户数据的任何访问。
我的建议: 只要把风险继续下去并混淆它。或者你可以 考虑使用代理模式(move the secret to a web server acting as an API proxy)。