代码之家  ›  专栏  ›  技术社区  ›  gokhanakkurt

安卓系统——存储共享偏好的数据

  •  3
  • gokhanakkurt  · 技术社区  · 13 年前

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

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

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

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

    我想知道这样做安全可靠吗?

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

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

    提前感谢,

    3 回复  |  直到 13 年前
        1
  •  4
  •   Philip    6 年前

    尽管Raghav Sood确实正确地回答了你的问题,但在我看来,你的应用程序设计方法是根本错误的。

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

    要想对oauth令牌有一个大致的了解,你可以查看关于它的维基百科文章 http://en.wikipedia.org/wiki/OAuth 举个例子,twitter对连接到它的应用程序使用这种方法 https://dev.twitter.com/docs/auth/oauth/faq

        2
  •  3
  •   Raghav Sood    13 年前

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

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

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

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

        3
  •  0
  •   Abdul Wasae    8 年前
    1. 让用户提交用户名&暗语
    2. 一旦后端验证了用户,使服务器返回 JWT
    3. 使用安全地将此JWT存储在共享首选项中 Hawk
    4. 将来使用此JWT对用户进行身份验证