繁体   English   中英

如何验证客户端 google+ 登录信息?

[英]How do I validate a client-side google+ login?

因此,按照此处的基本教程 ( https://developers.google.com/+/web/signin/javascript-flow ),您可以轻松地为 google 帐户添加客户端登录。

通过修改代码查询/people/me,如下:

function signinCallback(authResult) {
  if (authResult['status']['signed_in']) {
    gapi.auth.setToken(authResult);
    gapi.client.load('plus','v1', function(){
      var request = gapi.client.plus.people.get({
        'userId': 'me'
      });
      request.execute(function(resp) {
        console.log(resp);
      });
  });
}

您可以访问基本帐户信息; 用户 ID、图像、名称等。

您还有来自 oauth 登录名的有效访问令牌。

现在,除非您有一个完全客户端的应用程序,否则您将不得不通知服务器用户已登录,以获取该用户的应用程序数据。

我想要做的是 POST 到 /login/gauth {'access_token': ..., 'user_id': ....} 它将响应一个 auth cookie 并重定向回来; 除了现在我们有一个持久的本地身份验证令牌,我们可以用它来识别用户。

在服务器上,我需要做的是使用访问令牌访问相同的 REST api (/people/me),并验证它返回的用户 ID; 任何其他提供的信息都可以在客户端伪造。

问题是,我在服务器端找不到任何验证/使用访问令牌的方法。

我可以在服务器上设置一个新的 OAuth 登录,并执行仅服务器登录过程,但这相当复杂,而且考虑到我已经有一个有效的访问令牌,这似乎很浪费。

我如何使用它?

您可能想要使用https://developers.google.com/+/web/signin/server-side-flow 中概述的混合流程。 在此流程中,您的客户端执行的操作与现在大致相同,但您的客户端还会获得一个短期“代码”,它应该通过安全通道将其传递给服务器。 然后,服务器根据服务器验证这一点,以获得自己的访问(可能还有刷新)令牌。 这比客户端尝试发送 access_token 更安全,因为它减少了中间人可以利用它的窗口,并且只能使用一次,从而减少了机会。

接受的答案中的细节是正确的,但有一种更简单的方法,它只是含糊地暗示,而不是实际陈述,但如果您仔细阅读,它会出现在示例代码中。

关键是:

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=TOKEN

当 TOKEN 是客户端访问令牌时。 这将返回一个像这样的 json 块:

{u'access_type': u'online',
 u'audience': u'...',
 u'expires_in': 3475,
 u'issued_to': u'...', <--- The client ID; use this to verify access token
 u'user_id': u'1234567890', <--- The unique google user id 
 u'scope': u'https://www.googleapis.com/auth/userinfo.profile')

请注意,这只是验证:

  • 令牌有效(即用户登录)
  • user_id <--> access_token 绑定是有效的(不是客户端黑客成为不同的用户)
  • 应用程序 ID 是正确的

如果要查询有关用户的其他详细信息,则需要使用 OAuth 库之一。

在许多情况下,这可能足以唯一标识用户。

您可以通过验证服务器上用户 JWT id_token的真实性,跳过向tokeninfo端点发出网络请求。 这可以通过使用 Google 的 API 客户端库之一轻松完成。

这也使您可以避免在不需要时请求离线访问代码。

这是 Google文档中推荐的方法。

检查那里以获取更详细的说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM