用户同时登录双账号时,如何强制ScriptApp.getOAuthToken()使用工作账号?
强制ScriptApp.getOAuthToken()使用工作账号的解决方案
方法1:配置域范围授权(适合企业级Google Workspace插件)
如果你的插件面向icognition.cloud域内用户,可联系域管理员完成以下配置:
- 创建绑定到Apps Script项目的Google Cloud服务账号
- 管理员在Google Workspace管理控制台中,为该服务账号授予所需API的域范围权限
- 脚本中通过服务账号模拟工作账号身份调用API,无需用户手动授权,直接获取对应工作账号的token
方法2:限制脚本访问权限为域内用户
通过部署设置强制用户使用工作账号访问:
- 打开Apps Script编辑器,点击右上角「部署」→「管理部署」
- 编辑现有部署,将「谁有权访问」设置为「仅限icognition.cloud域内的用户」
- 保存后,个人账号无法访问插件,用户必须使用工作账号登录,此时
ScriptApp.getOAuthToken()获取的就是工作账号的token
方法3:使用OAuth2库手动指定工作账号
借助OAuth2库自定义授权流程,引导用户选择工作账号:
- 在脚本中添加OAuth2库(库ID:
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF) - 构建授权URL时,通过
login_hint参数指定工作账号的邮箱或@icognition.cloud域名,强制引导用户选择工作账号 - 授权完成后,存储并使用该账号的token替代
ScriptApp.getOAuthToken()
示例代码片段:
function getWorkAccountToken() { const oauth2 = OAuth2.createService('work-account') .setAuthorizationBaseUrl('https://accounts.google.com/o/oauth2/auth') .setTokenUrl('https://accounts.google.com/o/oauth2/token') .setClientId('你的客户端ID') .setClientSecret('你的客户端密钥') .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()) .setScope('所需API权限范围') // 指定工作账号域名,引导用户选择 .setParam('login_hint', '@icognition.cloud'); if (!oauth2.hasAccess()) { const authorizationUrl = oauth2.getAuthorizationUrl(); Logger.log('打开以下URL完成授权后重新运行脚本:%s', authorizationUrl); return null; } return oauth2.getAccessToken(); } function authCallback(request) { const oauth2 = OAuth2.createService('work-account'); const isAuthorized = oauth2.handleCallback(request); return HtmlService.createHtmlOutput(isAuthorized ? '授权成功' : '授权失败'); }
方法4:让用户设置工作账号为浏览器默认账号
引导用户调整浏览器默认账号设置:
- 点击浏览器右上角Google账号头像,选择「管理你的Google账号」
- 进入「个人信息」→「账号偏好设置」→「默认账号」,选择icognition.cloud工作账号
- 后续打开插件时会默认使用工作账号,
ScriptApp.getOAuthToken()将自动获取该账号的token
内容的提问来源于stack exchange,提问作者Jan Martin
相关产品推荐
相关产品推荐

