2011-04-02 45 views
3

我的应用程序连接到使用OAuth授权的服务器。 我应该如何在帐户管理器中存储这些帐户? 万一我已经登录并通过,它可以像下面:AccountManager和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

不要使用密码,你可以setAuthToken,把OAuth令牌有代替:

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

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

相关问题