google-chrome-extension - 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()}`;
}
它可以正常运行大约一个小时,之后令牌失效,我需要获得一个新令牌。如果我尝试launchWebAuthFlow
与interactive: false
我一起使用,则会收到错误“需要用户交互”
有没有办法在没有用户交互的情况下刷新令牌?
解决方案
推荐阅读
- bash - bash 脚本 expr - 算术语法错误
- scala - 如何在本地运行胶水作业?
- c# - 为许多相同类型的表单字段存储变量的最佳实践?
- javascript - 在 laravel 中获取 javascript net::ERR_ABORTED 404
- chatbot - Botium 脚本内存 - 话语中未拾取变量值
- angular - 是否可以从 Angular 中的服务中获取枚举的值
- xamarin - Xamarin 表单映射与 targetSdkVersion="28" 中断
- amazon-web-services - 部署命令在 aws sagemaker 中有什么作用?
- spring-boot - 使用 Thymeleaf 的基本表单登录 SpringBoot 不起作用?
- sql-server - 如何在 DataGridView 中过滤过滤后的数据