我的应用程序与使用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秘密? OAuth令牌应存储在KEY_AUTHTOKEN?
中答案 0 :(得分:0)
请勿使用setAuthToken
密码,而是将OAuth令牌放在那里:
了解AccountManager不是加密服务或钥匙串非常重要。它以正文传递的方式存储帐户凭据。在大多数设备上,这不是特别关注的问题,因为它将它们存储在只能由root访问的数据库中。但是在root设备上,任何拥有adb访问权限的人都可以读取凭据。
考虑到这一点,您不应将用户的实际密码传递给AccountManager.addAccountExplicitly()。相反,您应该存储对攻击者有限使用的加密安全令牌。如果您的用户凭据保护了有价值的东西,您应该仔细考虑做类似的事情。