【问题标题】:Android AccountManager with multiple auth token types具有多种身份验证令牌类型的 Android AccountManager
【发布时间】:2014-11-04 15:54:19
【问题描述】:

我按照同步适配器示例创建了一个 AccountManager 和一个同步适配器。我想在同一个帐户下有两种不同类型的身份验证令牌用于不同的目的(访问不同的服务 - 同步适配器使用其中之一)。

一切正常,但我发现当我对一种 authtoken 类型进行身份验证(通过 getauthtoken)时,保存它的过程会替换另一种 authtoken 类型。我在之前和之后查看了 accounts.db 文件。在调用获取 authtoken 类型“B”的令牌之前,accounts.db 中的 authtoken 表有一个用于 auth 类型“A”的 authtoken。调用后,accounts.db 中的 authtoken 表具有类型“B”的 authtoken,但删除了“A”。无论顺序如何,对于我的帐户类型,accountmanager 子系统似乎从不会为每个帐户存储一个以上的身份验证令牌。

当您有多个 authtoken 类型时,您是否需要在某个 xml 文件中配置一些特殊的东西?

【问题讨论】:

  • 保存令牌时,确定保存为特定类型吗?
  • 我一开始以为可能是这样,但我没有看到指定类型的方法。使用从 AccountAuthenticatorActivity 继承的 setAccountAuthenticatorResult() 方法设置令牌。 extras 包中的值没有指定类型 - 类型是使用 getAuthToken() 传递的。 AccountManager 中的所有键(例如 KEY_ACCOUNT_NAME)都没有引用 authtoken 类型,除非我错过了它。但我看到在 accounts.db 中正确设置了 authtoken 类型 - 只是删除了其他 authtoken 类型记录。
  • 在extras包中,可以指定类型,传入AccountManager.KEY_ACCOUNT_TYPE作为key,将账户类型的字符串表示作为value。
  • 是的,我的帐户类型由返回包中的 KEY_ACCOUNT_TYPE 指定(如示例同步适配器中)。帐户类型与 authtoken 类型不同。
  • 你是对的。请问在调用setAuthToken时,是否提供了auth token类型?

标签: android accountmanager auth-token


【解决方案1】:

我发现了我的问题。如果您因身份验证/登录成功而调用 AccountManager.setPassword(),它将使您帐户的所有身份验证令牌无效。这是一个未记录的副作用,在某些情况下,它是有道理的。不加选择地将密码设置为相同值的软件会意外地使其身份验证令牌无效。

【讨论】:

    猜你喜欢
    • 2012-08-01
    • 2012-06-03
    • 1970-01-01
    • 2012-12-23
    • 2011-09-14
    • 2012-02-07
    • 1970-01-01
    • 2012-09-20
    相关资源
    最近更新 更多