Android:存储用户名和密码?

Android:存储用户名和密码?,android,authentication,storage,credentials,Android,Authentication,Storage,Credentials,如果我想在Android应用程序中存储用户名和密码,最好的方法是什么?是通过“首选项”屏幕(但是如果用户错过了该选项怎么办?),还是弹出一个对话框询问用户凭据?如果是这样,我必须维护应用程序的状态。我该怎么做呢?我见过的大多数Android和iPhone应用程序都使用初始屏幕或对话框来请求凭据。我认为用户经常需要重新输入姓名/密码是很麻烦的,所以从可用性的角度来看,存储这些信息是有意义的 来自()的建议是: 一般来说,我们建议尽量减少询问用户的频率 凭据--使网络钓鱼攻击更加明显,减少 可能会成

如果我想在Android应用程序中存储用户名和密码,最好的方法是什么?是通过“首选项”屏幕(但是如果用户错过了该选项怎么办?),还是弹出一个对话框询问用户凭据?如果是这样,我必须维护应用程序的状态。我该怎么做呢?

我见过的大多数Android和iPhone应用程序都使用初始屏幕或对话框来请求凭据。我认为用户经常需要重新输入姓名/密码是很麻烦的,所以从可用性的角度来看,存储这些信息是有意义的

来自()的建议是:

一般来说,我们建议尽量减少询问用户的频率 凭据--使网络钓鱼攻击更加明显,减少 可能会成功。而是使用授权令牌和 刷新它

在可能的情况下,用户名和密码不应存储在 装置而是使用用户名和密码执行初始身份验证 用户提供的密码,然后使用短期, 特定于服务的授权令牌

使用是存储凭据的最佳选项。提供了如何使用它的示例


如果出于某种原因,您不能选择此选项,则可以使用此机制来持久化凭据。其他应用程序将无法访问您的首选项,因此用户的信息不容易公开

您还可以查看SDK中的示例。它可能会对您有所帮助。

如果您担心在SharedReference中将密码存储为明文,请查看一下。

您应该使用Android。它是为这个场景专门构建的。这有点麻烦,但它所做的一件事是,如果SIM卡发生变化,将使本地凭据无效,因此,如果有人刷卡并将新的SIM卡扔进手机,您的凭据将不会受到影响

这还为用户提供了一种快速简便的方法,可以从一个位置访问(并可能删除)他们在设备上拥有的任何帐户的存储凭据


SampleSyncAdapter(比如提到的@Miguel)是一个使用存储的帐户凭据的示例。

我认为保护您的凭据的最佳方法是首先考虑将密码加密存储在account.db文件中,这在非根设备中不容易获得,如果是根设备,黑客必须需要密钥才能解密

另一个选择是像Gmail那样进行身份验证。在与Gmail服务器进行第一次身份验证之后。您获得了用于密码的身份验证令牌。该令牌将以明文形式存储。如果您从服务器更改密码,则该令牌可能为false

最后一个选项我建议您启用双因素身份验证&为您的设备创建特定于设备的密码。丢失设备后,您只需禁用该设备。

上的信息相当实用,但基于“使用隐藏的android API”的方法。当您无法在设备上本地存储凭据/密码时,这是一个需要考虑的问题。
我还整理了这个想法的要点,可能会有所帮助。

看看这篇来自android开发者的帖子,这可能有助于提高android应用程序中存储数据的安全性


使用新的(Android 6.0)指纹硬件和API,您可以像在github示例应用程序中一样进行操作。

这些按难度排序,以打破隐藏信息

  • 明文存储

  • 使用对称密钥加密存储

  • 使用Android密钥库

  • 使用非对称密钥加密存储

  • 资料来源:

    密钥库本身是使用用户自己的锁屏pin/密码加密的,因此,当设备屏幕被锁定时,密钥库不可用。如果您有需要访问应用程序机密的后台服务,请记住这一点


    来源:

    我想说,按照首选项的方式保存密码信息是有风险的。在根手机上,可以访问应用程序的首选项文件。你能做的至少是混淆密码。如果有人拥有你的手机,并且能够为其设置根目录,那么你将无法做很多事情来保证你的数据安全。混淆密码不是一个坏主意,但它并没有真正增加更多的保护。更重要的是,操作系统中已经内置了许多安全层。当然,你不想做任何愚蠢的事来规避这些措施。最好使用OAuth这样的系统,在设备上存储一个令牌,而不是用户名和密码。如果你使用
    AccountManager
    (根据我的回答,@Miguel's以迂回的方式)并且有人得到了你的GSM电话,他们需要继续使用你的SIM卡才能访问你的帐户,因为当SIM卡更改时,它将使存储的凭据无效。SIP更改上的帐户擦除在很久以前就被删除了,因为它没有什么意义,特别是对于拥有多个SIM卡的用户。如果您的手机被盗,一个更好的策略是转到您的Google帐户页面并撤销对特定设备的访问。“使用AccountManger是存储凭据的最佳选择。”为什么?哪里有记录表明AccountManager会“在SIM卡发生变化时使本地凭据无效”?我不知道这一点。然而,在我的应用程序的一些用户在SIM卡交换后出现身份验证问题后,我开始相信/接受/理解这一点。我在JavaDocs或AccountManager代码中没有看到这一点。这听起来是一个不错的功能,如果能验证它并了解详细信息就好了。根据@NikolayElenkov的说法,SIM卡更换无效功能已经被删除了。@ThomasW你有没有关于