14

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

在 AppEngine 上设置 OAuth 很简单 - 我按照这篇文章进行操作。但是客户端是一个谜,特别是我不知道在 AccountManager 术语authTokenType中使用什么作为范围。对于 ClientLogin,我将“ah”用于authTokenType。但是 OAuth 呢?

4

2 回答 2

10

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

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

于 2012-09-27T17:16:13.363 回答
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.email和)的访问令牌。https://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 => 您可以信任它!

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

于 2012-05-05T01:07:59.143 回答