【问题标题】:Android AccountManager: peekAuthTokenAndroid AccountManager: peekAuthToken
【发布时间】:2016-07-20 03:17:26
【问题描述】:

我已经在 Android 中实现了一个帐户管理器,并且我在应用程序中经常使用 peekAuthToken 来获取令牌。

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

供身份验证器使用,而不是直接供应用程序使用。

为什么会这样,使用这种方法获取 authToken 会有什么问题?

【问题讨论】:

  • 为什么不使用 getAuthToken?
  • 我想知道如果 peekAuthToken 有效,为什么要使用它,不使用它有什么危害?
  • 如果他们说“旨在供身份验证器使用,而不是直接供应用程序使用。”我相信他们知道该说什么
  • 好吧,我想了解更多关于底层结构的信息,为什么不鼓励打电话。但我也相信文档。
  • @JoakimEngstrom 你找到答案了吗?我面临同样的问题。你在使用 peekAuthToken 有什么问题吗?

标签: android android-contentprovider accountmanager


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多