获取OAuth2刷新令牌以访问ReactJs项目中的Google服务

问题描述 投票:0回答:1

我正在处理以下问题。

我有一个 ReactJs 项目,它运行到 Google AppEngine。

我有一个类,允许系统使用 OAuth2 令牌访问 Google 服务(例如 BigQuery、Drive、GMail...)。我使用 Google Identity Service 连接到 Google 服务。我没有在ReactJs中使用gapi或任何其他谷歌库。

不幸的是,令牌在一小时后过期,我希望它能被刷新。

在我的index.html中我有这个脚本

<script src="https://accounts.google.com/gsi/client" async defer></script>

我可以初始化用户以获取信息(电子邮件、图片、姓名......)

async function init(setUserConnected) {
     const google = window.google;
     google.accounts.id.initialize({
         client_id: CLIENT_ID,
         callback: (response) => {
             const userObject = jwt_decode(response.credential);
             let userConnected = userObject;
             userConnected.ldap = userConnected.email.replace("@google.com", "");
             setUserConnected(userConnected);
             new Storage().setJson("userLogged", userConnected);
         },
      });
}

我可以获得使用 Google 服务的令牌

async function getToken(setAccessToken) {
     const google = window.google;
     return await google.accounts.oauth2.initTokenClient({
         client_id: CLIENT_ID,
         scope: SCOPES,
         callback: (tokenResponse) => {
             tokenResponse.creationDate = new Date();
             new Storage().setJson("accessToken", tokenResponse);
             setAccessToken(tokenResponse);
         },
     }).requestAccessToken();
}

获取刷新令牌有什么帮助吗?

非常感谢。

我想知道如何获取刷新令牌,以便令牌自动更新,而不要求用户注销并再次登录。

reactjs google-app-engine oauth-2.0 bearer-token refresh-token
1个回答
0
投票

客户端库似乎无法实现这一点。 Google 需要安全存储(例如后端)来获取刷新令牌。因此,如果您想仅使用客户端并且需要新令牌,则必须使用

requestAccessToken()
方法,该方法将触发 Google 身份验证弹出窗口。

这里有一些很好的(尽管隐藏得很好)文档,可能对您有用:

  • 来自使用代币模型-代币过期

    根据设计,访问令牌的生命周期很短。如果访问令牌在用户会话结束之前过期,请通过从用户驱动事件(例如按下按钮)调用 requestAccessToken() 来获取新令牌。

    是的,不幸的是,这意味着用户每次需要新令牌时都必须单击按钮浏览同意弹出窗口。来自同一个文档:

    使用 requestAccessToken() 方法触发令牌 UX 流程并获取访问令牌。

  • 来自选择用户授权模型-OAuth 2.0流程比较

© www.soinside.com 2019 - 2024. All rights reserved.