实际上,让我的用户使用Google登录的首选JavaScript方法是什么?

Bla*_*lly 4 javascript google-api oauth-2.0 google-oauth

我一直争先恐后地将我的网站(使用服务器端,基于Go的OpenID解决方案,在过去的星期一可能已经或可能没有被Google禁用)转换为Google JavaScript oauth库,以使我的用户能够登录使用他们的Google帐户.我首先在这里问了一个问题,并收到了一些试图提供帮助的人的评论,但没有得到明确答案.然后,我决定只发挥它的安全,并转换为另一种方法,这似乎起初进展顺利,但我现在有一些抱怨我的用户,他们无法得到签署的,看到我的下一个问题在这里.

我现在的问题是,我已经在不同的api库中找到了至少四套不同的文档,所有文档都在Google官方网站上,所有这些都声称告诉我如何执行此操作.没有特别的顺序:

  1. 适用于JavaScript的Google API客户端库(测试版)
  2. Google+平台,快速入门
  3. Google Identity Platform
  4. Google登录网站

我现在对实际的"首选"方法可能是什么感到困惑,我想知道我是否可能使用过时的方法可能导致我的问题?我目前正在使用上面列表中选项#2的"快速入门"指南中使用的方法.

任何见解将不胜感激.

Joh*_*tad 6

简短版本:使用Google登录网站.要从OpenID2迁移:https: //developers.google.com/identity/sign-in/auth-migration#oid2

如果您必须/非常喜欢直接使用标准OAuth2:https: //developers.google.com/identity/protocols/OpenID2Migration

在客户端与Google Identity Platform Javascript API(Google Sign-In for Websites)的基本集成看起来像这样:

<html lang="en">
  <head>
    <meta name="google-signin-scope" content="profile email">
    <meta name="google-signin-client_id" content="YOURCLIENTID.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
  </head>
  <body>
    <div class="g-signin2" data-openidrealm="YOUR_REALM" data-onsuccess="onSignIn"></div>
    <script>
      function onSignIn(googleUser) {
        // Useful data for your client-side scripts:
        var profile = googleUser.getBasicProfile();
        console.log("ID: " + profile.getId()); // NB. don't send this directly to your server, as that is insecure. Instead, send the full id_token, which your server can extract the id from using the 'sub' value.
        console.log("Name: " + profile.getName());
        console.log("Image URL: " + profile.getImageUrl());
        console.log("Email: " + profile.getEmail());

        // The ID token you need to pass to your backend:
        var id_token = googleUser.getAuthResponse().id_token;
        console.log("ID Token: " + id_token);
      };
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

以上内容记录用户,并为您提供ID令牌.您需要将"YOURCLIENTID.apps.googleusercontent.com"替换为您在开发人员控制台中注册的客户端ID (创建项目,然后导航到API和身份验证 - >凭据 - >创建新的客户端ID).请务必在"授权的JavaScript源"列表中指定您的生产和开发域.同时将该示例中的"YOUR_REALM"替换为以前的OpenID 2.0域.

获得"id_token"后,您可以使用后端进行身份验证.您可以通过将"id_token"传递给后端,然后使用JWT库对其进行验证和解码来完成此操作.特别是对于OpenID迁移,您需要将JWT中的"openid_id"值映射到新的"sub"ID.

id_token验证的一些示例代码在这里:

对于测试,您可以使用此工具解码ID令牌以查看其包含的数据(它应包含openid_id作为声明).

关于文档:对于登录,首选方法是Google登录网站(#4).它实现了最简单且最佳更新的登录API.

在幕后,Google登录是OAuth2/OpenIDConnect的一个实现.上面的链接#3描述了使用此标准流程,以及整页重定向.这是受支持的流程,但正如链接中所述,Google登录网站是可行的.

Google API客户端库(#1)使用OAuth.其示例代码描述了旧的遗留身份验证模型,应该进行更新.我们很快就会这样做; 感谢提高注意力.

最后,随着最近推出的Google登录网站,Google+平台API(#2)不再是登录的首选方法.我们正在尽快更新文档以避免将来出现混淆.