Android - 存储共享首选项的数据

时间:2013-04-02 13:19:46

标签: android login sharedpreferences password-encryption storing-data

我目前正在设计一个具有初始登录页面的应用程序。我提供了记住我的功能,并在共享首选项中存储了用户名和密码值。我在下面说明了我的示例代码。

SharedPreferences preferences = getApplicationContext().getSharedPreferences("MyAppSettings",Context.MODE_PRIVATE);
SharedPreferences.Editor edit = preferences.edit();
edit.putString("username",username);
edit.putString("password",password); 
edit.commit();

信息: 假设用户名和密码是由用户填写的字符串变量

每当用户设置复选框时,请记住我,我将这些变量存储在共享首选项中。

我想知道这种方式安全可靠吗?

我的意思是可以从应用程序外部访问这些变量吗?

另外,我是否必须加密用户的密码并存储在共享首选项中?

提前致谢,

3 个答案:

答案 0 :(得分:3)

  

我的意思是可以从应用程序外部访问这些变量吗?

拥有root设备的任何人都可以查看您的SharedPreferences。它只是存储在设备上的XML文件。

  

另外,我是否必须加密用户的密码并存储在共享首选项中?

这样做会更安全,是的。同时加密用户名。

答案 1 :(得分:3)

尽管Raghav Sood的回答确实正确回答了您的问题,但我认为您的应用设计方法在哲学上是错误的。

现代实践规定您不应在应用中存储用户名和密码。相反,登录过程应该生成一个oauth令牌,然后您的应用可以加密并记住将来访问Web服务器。

要获得关于oauth令牌的一般性阅读,您可以查看其上的维基百科文章http://en.wikipedia.org/wiki/OAuth,例如,twitter将此方法用于与其相关联的应用https://dev.twitter.com/docs/auth/oauth/faq

答案 2 :(得分:0)

  1. 让用户提交用户名&密码
  2. 后端验证用户后,让服务器返回JWT
  3. 使用Hawk
  4. 安全地将此JWT存储在共享首选项中
  5. 使用此JWT在将来验证用户