我可以使用Android的AccountManager获取AppEngine的OAuth访问令牌吗?

时间:2012-05-01 16:00:22

标签: android google-app-engine authentication login oauth

我的AppEngine服务器都有Android客户端,都使用Google帐户。我想使用AccountManager获取OAuth的 accessToken 。到目前为止,我正在使用ClientLogin,但我想切换到OAuth。

在AppEngine上设置OAuth很简单 - 我跟着this article。但客户端是一个谜,特别是我不知道用于范围的内容,在AccountManager术语 authTokenType 中。对于ClientLogin,我对 authTokenType 使用“ah”。但是OAuth呢?

2 个答案:

答案 0 :(得分:10)

截至今天,您可以在Android上使用Google Play Services API在Android上进行Oauth 2.0身份验证。然后,您可以使用@nivco描述的方法获取appengine上的userinfo。我还没有这样做,但我计划完全按照你的说法去做。

https://developers.google.com/android/google-play-services/authentication

答案 1 :(得分:6)

我不确定您要通过您所指的文章中使用的App Engine OAuthService来做什么。另外,据说AppEngine OAuthService仅支持OAuth 1,但Android仅支持OAuth 2 :)所以你搞砸了。

如果您想跨Android - App Engine身份验证,我会做的是:

  1. 在Android中:从AccountManager获取UserInfo API的访问令牌(范围= https://www.googleapis.com/auth/userinfo.emailhttps://www.googleapis.com/auth/userinfo.profile)。
  2. 在您从Android到AppEngine的请求的URL参数中将访问令牌传递给App Engine(请确保使用HTTPS以避免拦截!)。
  3. 在App Engine端:使用访问令牌使用UserInfo API读取用户的身份。这基本上是使用OpenID Connect!
  4. 然后,您可以使用从UserInfo API获取的信息来验证用户身份。您将从UserInfo API获得的电子邮件和用户ID等同于您从AppEngine的UserService =>获得的电子邮件和用户ID。你可以信任它!

  5. PS:我描述了使用this article中的Android AccountManager获取OAuth 2令牌。它写在冰淇淋三明治之前,但我跳的它仍然有效。基本上authTokenType需要为oauth2:{scopes},因此例如{API}的oauth2:https://www.googleapis.com/auth/tasks。现在可能有更好的方法可以做到这一点。