从 GAPI 迁移到 Google Identity Services (GIS),服务器端问题

cod*_*ead 5 google-oauth google-api-js-client google-identity-toolkit google-signin google-identity

如何使用新系统 (GIS) 获取刷新的 ID 令牌?

我有一个网络应用程序,它使用 Google 登录并将 id_token 发送到我的服务器以使用某些 GCP 服务。我按以下方式使用 GAPI Signin2/auth2:

  • gapi.client.init(API_KEY, OAUTH_CLIENT_ID, SCOPES), SCOPES 只有 userinfo.email 和个人资料
  • 获取 currentUser by gapi.auth2.getAuthInstance().currentUser.get()(如果用户未登录,则呈现登录按钮)
  • 如果currentUser.hasGrantedScopes(SCOPES)
    • 那么gapi.client.getToken()这会给我一个{ id_token, access_token }
  • 然后,我会将 id_token 发送到我的服务器,以确保用户已登录并获取他们的 Google 用户 ID

在我的 NodeJS 服务器上,我将使用 google-auth-library 中的 OAuth2Client:

  • 使用创建一个新的 OAuth2Client 实例new OAuth2Client(OAUTH_CLIENT_ID)

  • 当客户端发送请求时,从凭据中提取 id_token 并调用:

    oauthClient.verifyIdToken({ idToken: idToken, 受众: OAUTH_CLIENT_ID, })

  • 在此结果上调用 getPayload() 将为我提供用户的 Google id,然后我可以用它来存储由它键入的数据等。

  • 当服务器发现id_token已过期时,会因verifyIdToken()而出错。

客户端将捕获令牌过期错误并通过执行以下操作发出刷新:

  • authInstance.currentUser.get().reloadAuthResponse()
  • 响应将具有新的凭据 ({id_token, access_token})
  • 客户端将使用新的凭据重新向服务器发出请求

====

好吧,现在 Google 表示他们将在新库(Google Identity Services)中弃用 Signin2,并表示我们都应该迁移到它。

我已经弄清楚如何进行客户端登录,并且它更容易且代码更少 - 太棒了!

这很简单:

  • 调用 google.accounts.id.initialize({auto_select: true, client_id: CLIENT_ID, 回调: creds => ....)
  • 调用 google.accounts.id.prompt()
  • 如果从未处理过提示,则在该回调中调用 google.accounts.id.renderButton()

我不知道如何在服务器端处理事情。如何使用新系统 (GIS) 获取刷新的 ID 令牌?迁移指南说应该删除 reloadAuthResponse() ,因为

ID 令牌已取代 OAuth2 访问令牌和范围。

但事实是,ID 令牌仍然会在某个时候过期,不是吗?

我究竟做错了什么?我应该如何迁移我的服务器代码以使用新的 id_token 来验证用户的身份并提取它?我应该停止在服务器上使用 OAuth2Client 并使用其他库吗?

Ame*_*ath 1

迁移策略没有明确记录。

请参阅此链接(查找 oauth2.0 端点实现),他们使用新的 Oauth2.0 实现(GIS)编写了一个示例应用程序