如何使用 android 的帐户管理器获取多个范围的身份验证令牌

Posted

技术标签:

【中文标题】如何使用 android 的帐户管理器获取多个范围的身份验证令牌【英文标题】:How can I get an auth token for multiple scopes using android's account manager 【发布时间】:2013-01-03 09:45:16 【问题描述】:

我需要从一个 android 应用程序中获取一个 oauth 令牌,这将允许我连接到我的 appengine 应用程序以及能够从用户的帐户发送电子邮件。我遇到的问题是,由于某种原因,实际上没有任何关于可用的身份验证令牌范围的好的文档。

根据我的发现,您可以使用空格分隔符连接身份验证令牌,但我没有运气。 accountManager.getAuthToken(account, "oauth2:https://mail.google.com/", null, activity, new AuthTokenCallback(), null); 可以很好地获取电子邮件令牌。

同样 accountManager.getAuthToken(account, "ah", null, activity, new AuthTokenCallback(), null); 非常适合应用引擎令牌。

然而 accountManager.getAuthToken(account, "oauth2:https://mail.google.com/ ah", null, activity, new AuthTokenCallback(), null); 让我陷入错误

Couldn't sign in, There was a problem communicating with Google servers Try again later

我怎样才能让这两者像良好的 Google 小服务一样协同工作?

【问题讨论】:

【参考方案1】:

问题是您正在尝试将 OAuth 2.0 范围(“https://mail.google.com/”)与 ClientLogin 范围(“ah”)混合,我认为这不受支持。

当您想要一个具有多个权限级别的令牌时,您可以将它们与您所说的空格分隔符连接起来。对于 OAuth 2 范围,它是这样完成的:oauth2:space separated list of scopes

当您提供范围 oauth2:https://mail.google.com/ ah 时,假定两个范围都是 OAuth 2 范围。但由于“啊”不是有效的 OAuth 2 范围,Google 服务器不会接受它,而是会给出您看到的错误。

我不知道 App Engine 的任何 OAuth 2 范围和 *** 上来自 2011 和 2012 的两个较早的问题表明它还不支持 OAuth 2。

【讨论】:

它不支持铸造 OAuth 2.0 令牌,但您可以使用oauth API 验证它们:oauth.get_current_user(THE_OAUTH2_SCOPE_USED)developers.google.com/appengine/docs/python/oauth/overview 啊,这就解释了,谢谢。不幸的是,除了必须分别存储和管理两个令牌之外,我似乎找不到解决方法。希望这将很快得到解决..

以上是关于如何使用 android 的帐户管理器获取多个范围的身份验证令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Windows Git 凭据管理器使用多个 Git 帐户

使用 Android 帐户管理器在我的服务器上验证使用 FB 登录的用户

使用 Android 帐户管理器在我的服务器上验证使用 FB 登录的用户

ARM - 如何从存储帐户获取访问密钥,以便稍后在模板中的 AppSettings 中使用?

将原生 Google 帐户选择器与 B2C 结合使用

Android 内容解析器返回在移动设备中激活的所有帐户 否