在设备中保存凭据的最佳方法[关闭]
Posted
技术标签:
【中文标题】在设备中保存凭据的最佳方法[关闭]【英文标题】:Best way to save credentials in device [closed] 【发布时间】:2015-08-04 15:32:44 【问题描述】:我第一次使用身份验证,我必须将用户名保存在本地数据库中,我还应该保存密码和会话 ID,我是从服务器获取的。
因此,我需要选择安全保存此信息的最佳方式。我在某处读过一些文章,建议是SharedPreferences
和其他客户经理。
那么,您能指定哪种方式最适合这种情况吗?
【问题讨论】:
在 ios 中,您应该考虑将它们存储在 Keychain 中。 说“客户经理”是指android.accounts.AccountManager
吗?
我现在需要更多的改变,不是吗?
关于AccountManager
***.com/questions/2720315/…
感谢@Mauker。这里有一个有趣的点,它不需要在设置中添加帐户,我的意思是这种特殊情况下的凭据仅具有技术意义和用法。
【参考方案1】:
不要像其他人建议的那样使用NSUserDefaults
或SharedPreferences
,因为它们以纯文本形式存储信息。由于密码信息属于敏感数据,请先对其进行加密。
对于 iOS,请使用 KeyChain。这个包装器有帮助:
UICKeyChainStore
安卓使用
secure-preferences
*注意:为了进一步支持我的陈述,众所周知,Apple 拒绝以纯文本形式存储敏感数据的应用程序,因此请使用加密
【讨论】:
听起来不错,因为我看到它是 android (security-preferences) 的自定义库,我有 xamarin 项目,所以如果我加密密码而不是保存在共享首选项中并解密回来,得到相同的结果,对吗?【参考方案2】:在 Android 上,SharedPreferences
是一个很好的方法,它非常简单。但友情提醒... 这不是最安全的方法,但它可能是最简单的方法。如果设备已获得 root 权限,则用户可以访问该文件,并且数据以 Key-Value
的方式以纯文本形式存储。
您可以尝试对该数据使用一些加密,或者尝试找到一个包装器来处理它,例如SecurePreferences
,正如其他答案中所建议的那样。 iOS 也应该有其他的包装器或方法。
您也可以使用 Google 提供的 AccountManager
解决方案。这已经在this question 上讨论过。
您还可以尝试更改在服务器上验证用户身份的方式,建议使用 OAuth
,就像 Twitter 那样。
但是,如果您喜欢使用SharedPreferences
,下面还有更多内容。
您可以阅读更多关于 SharedPreferences
here 的信息。您可以访问文档here。
一个例子:
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:最好不要将敏感数据存储为纯文本。但这绝对是最简单的方法。
【讨论】:
以上是关于在设备中保存凭据的最佳方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章