javascript - 自动刷新 Google OAuth2 token

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

我正在尝试将照片上传到 Google Drive 功能(使用 Google Drive API 和 GIS)实现到我正在开发的 Web 应用程序中,但似乎无法弄清楚如何让用户的身份验证时间超过访问 token 的指定到期时间(1 小时),无需提示用户或打开弹出窗口。
https://github.com/googleworkspace/browser-samples/blob/master/drive/quickstart/index.html 提供的示例代码强制用户单击“刷新”按钮以获取新 token ,但这意味着我必须强制用户每小时登录一次,这并不理想(因为用户可能会更长时间地使用该应用程序一次超过一个小时)。
根据https://developers.google.com/identity/oauth2/web/guides/use-token-model#token_expiration ,这似乎是故意的。然而,在环顾一番之后,我发现可以使用刷新 token 来生成一个新的访问 token ,该 token 会在一个小时后过期。假设您每 45 分钟左右生成一个新 token (实际上是另一篇 Google 文章建议的,但我现在似乎找不到它),那么您永远不必担心这种重新身份验证。
但是,我不知道如何获取刷新 token 。
Not receiving Google OAuth refresh token建议发送access_type=offline作为查询参数,但我没有使用任何重定向,以及前面提到的 initTokenClient 的文档和 requestAccessToken不要提及 access_type范围。
我得到的最接近的是调用 requestAccessToken方法定期,但这仍然会弹出一个弹出窗口供用户再次登录,这是我试图避免的。即使使用 requestAccessToken({ prompt: "" })仍然会弹出这个弹出窗口,但它至少在没有任何用户输入的情况下登录。有没有办法完全禁用这个弹出窗口?
最坏的情况是,我强制用户每小时重新验证一次,但这似乎会导致不太理想的用户体验。任何帮助表示赞赏。

最佳答案

我已经逐步浏览了 GIS 库代码,并且可以确认 prompt='' 和 prompt='none' 没有按照 requestAccessToken 文档所暗示的方式实现。 GIS 总是打开一个弹出窗口。 prompt 参数仅更改弹出窗口中发生的情况。 GIS 中也没有 token 存储或缓存功能,仅在弹出窗口中。
当前的提示参数行为是根据 OAuth 2.0 flow comparison 设计的。 table 。仅当用户调用需要它的操作时才应刷新访问 token 。
这给我们留下了非常糟糕的 UX 体验,弹出窗口必须每小时左右短暂地打开和关闭。另一种方法是使用授权码流。但它需要实现一种机制,将访问 token 从后端发送回客户端。

关于javascript - 自动刷新 Google OAuth2 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72080698/

相关文章:

用于显示/隐藏的 JavaScript <c :forEach> div element of JSTL

javascript - 在 Google Maps Places API 中限制基于特定国家/地区的搜索

java - 异常 : 401 Unauthorized Error | com. google.api.client.auth.oauth2.TokenResponseException:401 未经授权

google-chrome-extension - 带有 oauth 的 Google chrome 扩展

api - Google 登录集成错误 : 401. 错误 : deleted_client The OAuth client was deleted. 这里的解决方案是什么?

javascript - 具有 Node 和 Express 的 API 返回旧的缓存响应,直到检索到新的响应

javascript - d3js堆积条形图未更新

javascript - 如何根据当前用户的位置获取城市和省份

oauth - 无需登录即可获取谷歌分析 API 数据

jwt - 使用 Google 进行身份验证时,从 Spring OAuth2 授权服务器发出 JWT token