Android 在设备中保存凭据的最佳方法
我是第一次使用身份验证,我必须在本地数据库中保存用户名,我还应该保存密码和会话id,我从服务器上获取这些信息 所以,我需要选择安全保存此信息的最佳方式。我在某个地方读过一些文章,建议是Android 在设备中保存凭据的最佳方法,android,ios,security,xamarin,sharedpreferences,Android,Ios,Security,Xamarin,Sharedpreferences,我是第一次使用身份验证,我必须在本地数据库中保存用户名,我还应该保存密码和会话id,我从服务器上获取这些信息 所以,我需要选择安全保存此信息的最佳方式。我在某个地方读过一些文章,建议是SharedReferences和其他客户经理 那么,您能否指定哪种方式最适合这种情况 在Android上,SharedReferences是一种很好的方法,非常简单。但是一个友好的提醒这不是最安全的方法,但可能是最简单的方法。如果设备是根设备,并且数据以键值的方式以纯文本存储,则用户可以访问该文件 您可以尝试对该
SharedReferences
和其他客户经理
那么,您能否指定哪种方式最适合这种情况 在Android上,
SharedReferences
是一种很好的方法,非常简单。但是一个友好的提醒这不是最安全的方法,但可能是最简单的方法。如果设备是根设备,并且数据以键值
的方式以纯文本存储,则用户可以访问该文件
您可以尝试对该数据使用一些加密,或者尝试找到一个包装器来处理该数据,就像在其他答案中建议的那样。iOS还应该有其他包装器或方法
你也可以使用谷歌提供的解决方案。这已经在这里讨论过了
你也可以尝试改变你在你的服务器上验证用户的方式,这是一个建议,就像Twitter一样
但是,如果您喜欢使用SharedReferences
,下面还有更多内容
您可以阅读有关SharedReferences
的更多信息。您可以访问这些文档
例如:
public class SessionManager {
private static SessionManager instance = null;
private SharedPreferences sharedPref;
private Editor editor;
private final String prefName = "session";
public static SessionManager getInstance() {
if (instance == null) {
instance = new SessionManager();
}
return instance;
}
private SessionManager() {
sharedPref = context_.getSharedPreferences(prefName,Context.MODE_PRIVATE);
}
public void saveUser(String username, String password, int sid) {
if (TextUtils.isEmpty(username) && TextUtils.isEmpty(password) && sid > 0) {
editor = sharedPref.edit();
editor.putInt("session_id",sid);
editor.putString("username", username);
editor.putString("password",password);
editor.commit();
}
}
public String getUsername() {
return sharedPref.getString("username",null);
}
// Declare other methods to fetch the rest of the data.
}
TL;DR:最好不要将敏感数据存储为纯文本。但这绝对是最简单的方法。不要像其他人建议的那样使用
NSUserDefaults
或SharedReferences
,因为它们以纯文本形式存储信息。由于密码信息被认为是敏感数据,因此首先对其进行加密
对于iOS,使用钥匙链。此包装有助于:
供Android使用
*注意:为了进一步支持我的声明,众所周知苹果拒绝使用纯文本存储敏感数据的应用程序,因此请在iOS中使用加密,你应该考虑将它们存储在中。你说的“帐户管理器”是指安卓.accounts.AccountManager?它现在需要我这边做更多的更改,不是吗?关于
AccountManager
谢谢@Mauker。这里有一个有趣的点,它不需要在设置中添加帐户,我的意思是,在这种特殊情况下,凭据只有技术意义和用法。听起来不错,因为我看到它是android的自定义库(安全首选项),我有xamarin项目,所以如果我加密密码而不是保存在共享首选项中并解密回来,得到了同样的结果,对吗?