首页 > 解决方案 > Chrome 扩展 - 来自“launchWebAuthFlow”的令牌在一小时后过期,需要用户交互才能获得新的

问题描述

launchWebAuthFlow在服务工作者中使用来验证选择在其 Google Drive 中备份扩展设置的用户。当用户单击登录按钮时,它会向服务工作者(MV3,以前的“后台脚本”)发送一条消息,后者执行以下操作:

const redirectUrl = await browser.identity.launchWebAuthFlow({
        'url': _createAuthEndpoint(),
        'interactive': true
    })
    const url = new URL(redirectUrl);
    const urlParams = new URLSearchParams(url.hash.slice(1));
    const params = Object.fromEntries(urlParams.entries());
    await browser.storage.local.set({googleToken: params.access_token});

构造 auth url 的辅助方法:

function _createAuthEndpoint() {
  const redirectURL = browser.identity.getRedirectURL();
  const { oauth2 } = browser.runtime.getManifest();
  const clientId = oauth2.client_id;
  const authParams = new URLSearchParams({
    client_id: clientId,
    response_type: 'token',
    redirect_uri: redirectURL,
    scope: 'openid ' + oauth2.scopes.join(' '),
  });
  return `https://accounts.google.com/o/oauth2/auth?${authParams.toString()}`;
}

它可以正常运行大约一个小时,之后令牌失效,我需要获得一个新令牌。如果我尝试launchWebAuthFlowinteractive: false我一起使用,则会收到错误“需要用户交互”

有没有办法在没有用户交互的情况下刷新令牌?

标签: google-chrome-extensionoauthtoken

解决方案


推荐阅读