【问题标题】:Android accountmanager and storing passwordsAndroid accountmanager 和存储密码
【发布时间】:2017-03-20 15:35:41
【问题描述】:

我正在阅读其他线程,但无法得出正确的答案。就这样吧:

假设我有一个保护后端 API 的 Oauth2 服务器实现。我希望我的应用程序能够像 facebook 或 gmail 应用程序一样运行,并且希望在他们最初登录后永远保持身份验证(直到他们手动撤销)。永远不要再询问他们的密码。如果不将密码存储在设备上,这可能吗?

是否有刷新令牌来解决这个问题,或者应该以其他方式解决这个问题?还有一个android库可以解决这个问题,因为我不想重新发明轮子。

【问题讨论】:

    标签: android oauth oauth-2.0 accountmanager


    【解决方案1】:

    您可以通过AccountManager 为您的用户保存用户名、密码和令牌,并在以后检索。只需在应用打开时检查用户帐户是否存在即可。

    您也可以稍后更新帐户凭据。 下面是一个基本的例子 sn-p

    private static final String TYPE_ACCOUNT = "com.some.package";    
    
    public static void addAccount(Context context, String username, String password, String token) {
        AccountManager accountManager = AccountManager.get(context);
        Account account = new Account(username, TYPE_ACCOUNT);
        accountManager.addAccountExplicitly(account, password, null);
        accountManager.setAuthToken(account, TYPE_ACCOUNT, token);
      }
    
     public static Account getUserAccount(Context context) {
        AccountManager accountManager = AccountManager.get(context);
        Account account = null;
    
        try {
          account = accountManager.getAccountsByType(TYPE_ACCOUNT)[0];
        } catch (Exception ignored) {
    
        }
        return account;
      }
    

    【讨论】:

    • 这是最佳实践吗?与其寻找一些代码,我更感兴趣的是它是如何被 gmail 或 fb 等主要应用程序实现的。
    • 使用 AccountManager 是最佳实践,因为它提供了安全、可读和可维护的代码。在您的情况下,您可以使用它并通过 AccountManager 检查用户的令牌。实现添加、删除和撤销操作非常基础,谷歌的开源项目似乎没有多少使用 AccountManager。刚刚找到这个github.com/google/iosched/blob/…
    • 使用 AccountManager 确实是最佳实践。但真的很想知道其他标准应用程序究竟是如何做到的。比如他们在 AccountManager 中存储了什么?只有访问令牌?那么过期后如何使用呢?
    • 要创建一个帐户,需要唯一的名称和密码,而令牌是可选的。在某些时候,如果您的令牌失效,您需要调用 accountManager.invalidateAuthToken(),然后根据您的身份验证流程获取一个新的。
    • @dgngulcan 运行此代码时遇到的异常我该怎么办:java.lang.SecurityException: uid 10076 cannot显式添加帐户类型
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 2016-08-02
    • 2011-12-20
    • 2011-10-02
    • 1970-01-01
    相关资源
    最近更新 更多