Android AccountManager:peekAuthToken

时间:2015-04-17 08:22:39

标签: android android-contentprovider accountmanager

我在Android中实施了一个帐户管理员,并且我在应用程序中使用了很多peekAuthToken来获取令牌。

但我对源代码感到有点困惑,在文档中说:

  

供认证者使用,而不是直接由应用程序使用。

为什么会这样,使用此方法获取authToken的问题是什么?

1 个答案:

答案 0 :(得分:2)

在提供身份验证令牌之前,

peekAuthToken在内部检查两个uid是否相等:

  • 请求身份验证令牌的应用的uid
  • 提供身份验证IBinder的应用程序的uid(即管理帐户的uid)

如果uids不同,您将获得SecurityException。

换句话说,如果您使用应用程序的其余部分发送身份验证服务,那么您应该没问题。 (虽然我仍然建议使用getAuthToken代替)。但是,如果您要在一个应用中发送身份验证器,并希望在另一个应用中调用peekAuthToken,则无效。

https://github.com/android/platform_frameworks_base/blob/4535e11fb7010f2b104d3f8b3954407b9f330e0f/services/core/java/com/android/server/accounts/AccountManagerService.java#L1544