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

Dou*_*oug 5 javascript google-plus

因此,按照此处的基本教程 ( 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);
      });
  });
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

我如何使用它?

Pri*_*ner 4

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