【问题标题】:How to use scoped APIs with (GSI) Google Identity Services如何将作用域 API 与 (GSI) Google 身份服务一起使用
【发布时间】:2021-10-19 06:20:42
【问题描述】:

Google 最近给我发了一封电子邮件,内容如下:

您的一个或多个网络应用程序使用旧版 Google Sign-In JavaScript 库。请在 2023 年 3 月 31 日之前将您的项目迁移到新的 Google 身份服务 SDK

有问题的项目使用 Google Drive API 以及现在的旧身份验证客户端。

迁移页面 (https://developers.google.com/identity/gsi/web/guides/migration) 上的表格显示:

Old New Notes
JavaScript libraries
apis.google.com/js/platform.js accounts.google.com/gsi/client Replace old with new.
apis.google.com/js/api.js accounts.google.com/gsi/client Replace old with new.

我目前在前端使用gapi 来执行从apis.google.com/js/api.js 加载的授权。根据表格,我需要用新库替换它。

我尝试了以下方法来验证和授权,就像我过去对 gapi 所做的那样:

window.google.accounts.id.initialize({
  client_id: GOOGLE_CLIENT_ID,
  callback: console.log,
  scope: "https://www.googleapis.com/auth/drive.file",
  discoveryDocs: ["https://www.googleapis.com/discovery/v1/apis/drive/v3/rest"],
});

window.google.accounts.id.renderButton(ref.current, {
  size: "medium",
  type: "standard",
});

但是,当我尝试使用 Google 登录按钮进行身份验证时,scope 字段不受尊重,并且它不会要求用户授权请求的范围。它也不会在回调的凭据响应中返回任何形式的访问令牌。

我不确定如何授权使用新库。

【问题讨论】:

  • 这可能与它的身份登录使用配置文件、电子邮件的范围有关。您尝试做的是向其中添加 Oauth2 范围。我不确定它是为这种用途而设计的。
  • 如果有办法在一个请求中完成所有操作但我现在正在做的是使用授权端点并使用登录提示询问用户,我将不回答这个问题批准范围,而无需他们再次选择他们的帐户。 developers.google.com/identity/protocols/oauth2/…
  • 新的基于 gsi 的登录系统将提供包含用户 ID(子)、电子邮件、姓名和个人资料图片的令牌。还有什么需要注册/登录用户?

标签: javascript google-api google-oauth google-api-client google-identity


【解决方案1】:

在新的谷歌身份服务中,认证时刻和授权时刻是分开的。这意味着,GIS 为网站提供了不同的 API 来调用这两个不同的时刻。您不能再将它们组合在一个 API 调用(和 UX 流)中。

在验证时刻,用户只需登录或注册到您的网站(通过利用 Google 共享的信息)。用户需要做出的唯一决定是他们是否要登录(或注册)。此时无需做出与授权相关的决定。

在身份验证时刻,用户将在所有网站上看到一致的 One Tap 或按钮 UX(因为隐式请求相同的范围)。 一致性会带来更流畅的用户体验,这可能会进一步导致更多的使用。借助一致且优化的身份验证 UX(跨所有网站),用户将获得更好的联合登录体验。

用户登录后,当您确实想从 Google 数据服务加载一些数据时,您可以调用 GIS 授权 API 来触发 UX 流以允许最终用户授予权限。这就是授权时刻。

目前(2021 年 8 月),仅发布了身份验证 API。如果您的网站只关心身份验证,您现在可以迁移到 GIS。如果您还需要授权API,则需等待进一步通知。

【讨论】:

  • 这个答案很有帮助!这是否意味着如果我使用 Google 登录进行身份验证,我需要生成自己的访问和刷新令牌?这样我就知道用户实际登录并有权访问受限端点?
  • @Guibin 在我们的登录页面进行用户身份验证后 google gis onetap login 提供令牌 googleUser.credential ,其中包括他的 ID(子)、姓名、电子邮件和个人资料图片 问题我们不应该存储这些详细信息在我们的数据库中作为用户注册?
  • 感谢您的信息。是否有任何官方谷歌文档或链接提供更多关于时间表等的输入?
  • 如果属实,此信息非常有用,但我认为如果没有任何参考,它就缺乏权威性。这些信息肯定来自谷歌。我能问一下你是怎么发现这个的吗?你只是认为这是合乎逻辑的还是你能提供这些信息的来源?
  • @chris 你找到如何刷新过期令牌了吗?我找不到在哪里获取刷新令牌
猜你喜欢
  • 2013-07-29
  • 2020-07-20
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
相关资源
最近更新 更多