问题描述
我有一个Android应用程序,用户需要使用JSON Web令牌(访问/刷新令牌)发送请求。在安全性和易于访问性方面,我需要以正确的方式(或最佳做法)存储它。我听说过SharedPreferences和AccountManager,但是不同来源的意见不同。
解决方法
Shared preferences将是存储令牌的最佳选择。此存储是特定于应用程序的,其他应用程序无法访问此空间。至于加密,您要么要求用户每次都输入解密密码(从而破坏了缓存凭据的目的),要么将密钥保存到文件中,问题仍然存在。我在下面附加了使用sharedPrefs的详细信息-
如何初始化?
// 0 - for private mode`
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref",0);
Editor editor = pref.edit();
如何在共享首选项中存储数据?
editor.putString("key_name","string value"); // Storing string
OR
editor.putInt("key_name","int value"); //Storing integer
别忘了申请:
editor.apply();
如何从“共享首选项”中检索数据?
pref.getString("key_name",null); // getting String
pref.getInt("key_name",0); // getting Integer
希望这对您有帮助:)
,我有一个Android代码示例,该示例在存储在Shared Prefs中之前会对令牌进行加密,因为默认情况下这不是安全存储。而且,它避免了向最终用户询问令牌存储他们不了解的问题。
您可以轻松下载并运行我的应用程序,并且会发现在重新启动应用程序时没有登录提示:
应用首次运行时,会使用Android密钥存储区为该应用生成密钥,只有您的应用知道该密钥:
我的解决方案基于Okta Android SDK,因此也是一个不错的选择。