3

Google Cloud Endpoints 有自己的身份验证过程,其中后端端点方法只需传递一个com.google.appengine.api.users.User对象。

https://cloud.google.com/appengine/docs/java/endpoints/auth

Google+ Domains API 指定了自己的身份验证过程以获取com.google.api.client.auth.oauth2.Credential对象。这允许构建com.google.api.services.plusDomains.PlusDomain对象。

https://developers.google.com/+/domains/authentication/

您将如何集成这两个身份验证过程?这适用于具有 Google App Engine (Java) 后端的网络应用程序(Java 脚本)。

在理想情况下,我希望能够在用户离线时通过我的 JS 应用程序检索用户的简历/个人资料基本信息。

用例:我有一个评论线程,其中每个评论都有一个作者作为com.google.appengine.api.users.User对象保存在 Google 数据存储中。但是,当我在我的 JS Web 应用程序中呈现评论线程时,我想显示每个作者的个人资料图片。如果我可以从 Web 应用程序调用来检索每个评论者的简历,我可以为后端节省大量工作。Web 应用程序将用户对象作为 JSON。其中包括用户 ID 和电子邮件。

4

1 回答 1

3

因此,您的用例是:

  • com.google.appengine.api.users.User您的用户对您的应用进行身份验证,授予在端点 API 中正确接收对象所需的基本 userinfo.profile 范围
  • 您将这些用户对象保存到数据库,当您检索它们以显示他们评论的线程时,您希望调用 google+ API people.get 方法来检索他们的头像图像 URL

解决方案:如果您的用户看到了一个 oauth 流程,除了常规端点“userinfo.profile”范围之外,他们还授予了 google+ API 调用所需profile的范围(范围),那么调用 Google+ 应该没有问题API,来自JS客户端或来自Java后端,使用 Google API 客户端库,在通过该流程获取凭据之后。

为了避免每次都重新验证它们,您应该序列化并存储来自相关语言的凭据对象,或者您甚至可以简单地跟踪刷新令牌以获得它们的授权,并通过低级 OAuth 舞蹈来获得一个新的访问令牌(你可能想要做前者,因为它会为你做这件事)。

正如网络上其他地方(也在其他几个地方)所指出的,来自用户对象的用户ID与 Google+ 个人资料 ID 不同,因此在使用端点方法参数用户对象时要注意这一点。因此,您将无法使用 User 对象中的用户 ID 来调用people.get.

相反,您应该在用户首次登录或至少通过授予必要 Google+ 范围的 oauth 流程时存储用户的 Google+ 个人资料 ID,以及您已经使用的 User 对象。一旦从存储中每个用户的数据模型中检索到 Google+ 个人资料 ID(无论您使用什么解决方案,从 Datastore 到 SQL,您都必须使用(反)序列化的凭据对象或刷新/访问令牌来调用 Google+ API, ETC。)

于 2015-06-11T20:36:30.803 回答