我可以使用 Android Account Manager 获取 App Engine 的 OAuth 访问令牌吗?
Posted
技术标签:
【中文标题】我可以使用 Android Account Manager 获取 App Engine 的 OAuth 访问令牌吗?【英文标题】:Can I use Android's AccountManager for getting OAuth access token for AppEngine? 【发布时间】:2012-05-11 03:23:11 【问题描述】:我的 AppEngine 服务器有 android 客户端,两者都使用 Google 帐户。我想使用 AccountManager 为 OAuth 获取 accessToken。到目前为止,我正在使用 ClientLogin,但我想切换到 OAuth。
在 AppEngine 上设置 OAuth 很简单 - 我关注了 this article。但是客户端是一个谜,特别是我不知道用什么来定义范围,用 AccountManager 术语authTokenType。对于ClientLogin,我将“ah”用于authTokenType。但是 OAuth 呢?
【问题讨论】:
你看过 Eclipse 插件的“App Engine connected android project”选项吗?它会自动为您生成必要的代码。 我实际上并没有使用它,但是,IIRC,范围是你的整个应用程序。所以像'myapp.appspot.com' 我查看了“App Engine 连接的 android 项目”,它使用 ClientLogin,而不是 OAuth。作为范围的完整域可能会起作用,我会尝试的。 【参考方案1】:从今天开始,您可以在 android 上使用 Google Play Services API 在 android 上进行 Oauth 2.0 身份验证。然后,您可以使用@nivco 描述的方法在 appengine 上获取用户信息。我还没有这样做,但我计划完全按照你所说的去做。
https://developers.google.com/android/google-play-services/authentication
【讨论】:
【参考方案2】:我不确定您要通过您所指的文章中使用的 App Engine OAuthService 来实现什么。还说 AppEngine OAuthService 只支持 OAuth 1 但 Android 只支持 OAuth 2 :) 所以你搞砸了。
如果你想做跨 Android - App Engine 身份验证,我会做的是:
-
在 Android 中:从 AccountManager 获取 UserInfo API(范围 =
https://www.googleapis.com/auth/userinfo.email
和 https://www.googleapis.com/auth/userinfo.profile
)的访问令牌。
在您从 Android 向 AppEngine 发出的请求的 URL 参数中将访问令牌传递给 App Engine(确保使用 HTTPS 以避免拦截!)。
在 App Engine 端:使用访问令牌通过 UserInfo API 读取用户的身份。这基本上是在使用 OpenID Connect!
然后,您可以使用从 UserInfo API 获得的信息对用户进行身份验证。您从 UserInfo API 获得的电子邮件和用户 ID 等同于您从 AppEngine 的 UserService 获得的电子邮件和用户 ID => 您可以信任它!
PS:我在this article 中描述了使用 Android AccountManager 获取 OAuth 2 令牌。它是在冰淇淋三明治之前写的,但我希望它仍然有效。基本上authTokenType
需要是oauth2:scopes
,例如oauth2:https://www.googleapis.com/auth/tasks
用于Tasks API。现在可能有一些更好的方法可以做到这一点。
【讨论】:
感谢您为我指明正确的方向。但是我不需要通过 API 管理 AppEngine,所以我认为这个范围不起作用。我只想以普通用户身份使用 Google 帐户登录 AppEngine。 问题是您从AccountManager
获得的访问令牌仅对您的 Android 应用有效,因此如果您的网站尝试使用相同的令牌,它将被拒绝。我还没有找到解决这个问题的方法,我不敢相信没有其他人有这个问题......
我认为通过使用 App Engine 身份验证的 API 是不可能的......另外,据说 AppEngine 服务只支持 OAuth 1,但 Android 只支持 OAuth 2 :) 所以你搞砸了。
我添加了一些关于使用 userInfo API 的内容,我认为如果您想要跨 Android-AppEngine 用户身份验证,您应该这样做。以上是关于我可以使用 Android Account Manager 获取 App Engine 的 OAuth 访问令牌吗?的主要内容,如果未能解决你的问题,请参考以下文章
Android Account Manager 未缓存 authToken
安装android studio出现choose an account with administt