是否可以使用内置于Google Domains API身份验证的Google Cloud Endpoints?

时间:2015-06-10 07:41:50

标签: google-app-engine authentication google-plus google-cloud-endpoints google-plus-domains

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)后端的 Web应用程序(Java脚本)。

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

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

1 个答案:

答案 0 :(得分:3)

所以,你的用例是:

  • 您的用户对您的应用进行身份验证,授予在端点API中正确接收com.google.appengine.api.users.User对象所需的基本userinfo.profile范围
  • 您将这些用户对象保留在数据库中,当您检索它们以显示其评论的主题时,您想要调用google + API people.get method来检索其头像图片网址

解决方案:如果您的用户被提供了oauth流,除了常规端点" userinfo之外,他们还会为Google + API调用(profile范围)授予the scope required。简介"范围,在通过该流程获取凭据后,使用Google API客户端库从JS客户端或Java后端调用Google+ API应该没有问题。

为了避免每次重新验证它们,您应该serialize and store a credentials object from the language in question,或者您甚至可以简单地跟踪其授权的刷新令牌,并通过低级OAuth舞蹈获得全新访问权限令牌(你可能想要做前者,因为它会为你做这件事)。

如上所述elsewhere在网络上(在其他几个地方也是如此),用户ID from the User object与Google+个人资料ID不同,因此在使用端点方法时请注意这一点参数用户对象。因此,您无法使用User对象中的用户标识来调用people.get

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