我的应用程序与服务器连接,服务器使用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令牌应该存储在KEY_AUTHTOKEN中吗?
发布于 2012-11-07 18:36:11
不要使用您可以setAuthToken的密码,而是将OAuth令牌放在那里:
理解AccountManager不是加密服务或密钥链是很重要的。它以纯文本存储帐户凭据,就像您传递它们时一样。在大多数设备上,这不是一个特别的问题,因为它将它们存储在一个只有root用户才能访问的数据库中。但在一个根深蒂固的设备上,任何拥有亚行访问权限的人都可以读到证书。
考虑到这一点,您不应该将用户的实际密码传递给AccountManager.addAccountExplicitly()。相反,您应该存储一个对攻击者使用有限的加密安全令牌。如果您的用户凭据是保护有价值的东西,您应该仔细考虑做一些类似的事情。
https://stackoverflow.com/questions/5525705
复制相似问题