3

我的应用程序与使用 OAuth 授权的服务器连接。我应该如何在账户管理器中存储这些账户?如果我有登录并通过,它可能如下所示:

        Account account = new Account("user1", context.getString(R.string.ACCOUNT_TYPE));
        AccountManager am = AccountManager.get(context);
        if (am.addAccountExplicitly(account, "pass1", null)) {
            result = new Bundle();
            Log.i(TAG, "account: "+account.name+", "+account.type);
            result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name);
            result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type);
            activity.setAccountAuthenticatorResult(result);

但是在 OAuth 帐户的情况下应该传递什么而不是用户名并传递?我应该在哪里存储 OAuth-secret?OAuth 令牌应该存储在 KEY_AUTHTOKEN 中吗?

4

1 回答 1

0

不要使用您可以使用的密码setAuthToken,而是将 OAuth 令牌放在那里:

重要的是要了解 AccountManager 不是加密服务或钥匙串。它以纯文本形式存储帐户凭据,就像您传递它们一样。在大多数设备上,这不是一个特别的问题,因为它将它们存储在一个只能由 root 访问的数据库中。但是在有根设备上,任何对设备具有 adb 访问权限的人都可以读取凭据。

考虑到这一点,您不应将用户的实际密码传递给 AccountManager.addAccountExplicitly()。相反,您应该存储一个对攻击者来说用途有限的加密安全令牌。如果您的用户凭据正在保护有价值的东西,您应该仔细考虑做类似的事情。

于 2012-11-07T18:36:11.297 回答