Android AccountManager:peekAuthToken

Joa*_*rom 5 android accountmanager android-contentprovider

我在Android中实现了一个客户经理,我在应用程序中使用了很多peekAuthToken来获取令牌.

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

旨在供验证者使用,而不是由应用程序直接使用.

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

che*_*ork 3

peekAuthToken在提供身份验证令牌之前,内部检查两个 uid 是否相等:

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

如果 uid 不同,您将收到 SecurityException。

换句话说,如果您将身份验证服务与应用程序的其余部分一起提供,那么应该没问题。(尽管我仍然建议使用getAuthToken)。但是,如果您在一个应用程序中发送身份验证器并想调用peekAuthToken另一个应用程序,那么这是行不通的。

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