如何以正确的方式将jwt存储在android应用中?

问题描述

我有一个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,因此也是一个不错的选择。