3

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

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

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

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

我想知道这种方式执行这种操作是否安全可靠?

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

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

提前致谢,

4

3 回答 3

4

尽管 Raghav Sood 确实正确回答了您的问题,但我认为您的应用程序设计方法从根本上是错误的。

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

要全面了解 oauth 令牌,您可以查看关于它的维基百科文章http://en.wikipedia.org/wiki/OAuth,例如,twitter 将这种方法用于连接到它的应用程序https://dev.twitter .com/docs/auth/oauth/faq

于 2013-04-02T13:37:23.743 回答
3

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

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

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

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

于 2013-04-02T13:21:02.570 回答
0
  1. 让用户提交用户名和密码
  2. 后端验证用户后,让服务器返回一个JWT
  3. 使用Hawk将此 JWT 安全地存储在共享首选项中
  4. 将来使用此 JWT 对用户进行身份验证
于 2017-10-18T06:22:51.913 回答