使用 Google Apps 脚本配置 OAuth
Posted
技术标签:
【中文标题】使用 Google Apps 脚本配置 OAuth【英文标题】:Using Google Apps Script to configure OAuth 【发布时间】:2020-06-29 20:26:56 【问题描述】:我在配置我的 Google Apps 脚本以正确处理来自我正在联系的 API 的令牌时遇到了一些问题。据我所知,一切都是兼容的。
我正在使用 Apps 脚本 oAuth2 here。
当我运行以下脚本时,我能够进入我在应用程序上验证的 oAuth 屏幕,当它在 usercallback 上将凭据传递回谷歌脚本时,我收到以下错误。
Error: Error retrieving token: "id":"401","name":"unauthorized","detail":"Unauthorized" (line 541, file "Service")
我的 oAuth 脚本如下:
var CLIENT_ID = '...1';
var CLIENT_SECRET = '...2';
// configure the service
function getYNABService()
return OAuth2.createService('YNAB')
.setAuthorizationBaseUrl('https://app.youneedabudget.com/oauth/authorize')
.setTokenUrl('https://api.youneedabudget.com/v1/budgets?access_token')
.setClientId(CLIENT_ID)
.setClientSecret(CLIENT_SECRET)
.setCallbackFunction('authCallback')
.setPropertyStore(PropertiesService.getUserProperties())
.setScope('read-only')
.setGrantType('authorization_code');
// Logs the redict URI to register
// can also get this from File > Project Properties
function logRedirectUri()
var service = getService();
Logger.log(service.getRedirectUri());
// handle the callback
function authCallback (request)
var YNABService = getYNABService();
var isAuthorized = YNABService.handleCallback(request);
if (isAuthorized)
return htmlService.createHtmlOutput('Success! You can close this tab.');
else
return HtmlService.createHtmlOutput('Denied. You can close this tab');
我的 Google 表格脚本如下
// add custom menu
function onOpen()
var ui = SpreadsheetApp.getUi();
ui.createMenu('YNAB for Sheets')
.addItem('Authorize','showSidebar')
.addItem('Fetch Budget','FetchBudgets')
.addItem('Reset','reset')
.addToUi();
/***************************************/
// Show sidebar for Authorization
function showSidebar()
var YNABService = getYNABService();
if (!YNABService.hasAccess())
var authorizationUrl = YNABService.getAuthorizationUrl();
var template = HtmlService.createTemplate(
'<a href="<?= authorizationUrl ?>" target="_blank">Authorize</a>. ' +
'Reopen the sidebar when the authorization is complete.');
template.authorizationUrl = authorizationUrl;
var page = template.evaluate();
SpreadsheetApp.getUi().showSidebar(page);
else
// ...
function reset()
getYNABService().reset();
function FetchBudgets()
var YNABService = getYNABService();
var response = UrlFetchApp.fetch('https://api.youneedabudget.com/v1/budgets/default/accounts',
headers:
Authorization: 'Bearer ' + YNABService.getAccessToken()
);
// ...
【问题讨论】:
经过深入调查,问题似乎是我的错。我混合了客户端/服务器端身份验证的 URL。 app.youneedabudget.com/oauth/token? - 这是正确的令牌 URL。 【参考方案1】:经过深入调查,问题似乎是我的错。我混合了客户端/服务器端身份验证的 URL。
https://app.youneedabudget.com/oauth/token? - 这是正确的令牌 URL。
【讨论】:
您如何将凭据返回到 google 脚本? 将凭据带回 Google 脚本通常由您发送到的服务处理。通常有一个选项可以配置回调 URL,一旦完成登录,它就会将用户连同令牌负载一起发送到该 URL。 回调 URL 应该返回什么?以上是关于使用 Google Apps 脚本配置 OAuth的主要内容,如果未能解决你的问题,请参考以下文章
javascript 这是一套Google Apps脚本(或Adwords Scripty)Oauth 2.0功能集。我们的想法是您可以使用它来启动OAuth 2.0流程
我是否需要更改我的Apps脚本代码,因为Google+登录功能已被弃用?
使用 Google Apps 脚本在 Blogger 中创建帖子
无法使用访问令牌访问部署为网络应用程序的 Google Apps 脚本
例外:未配置访问 - API 更新后使用 Google Apps 脚本的 BigQuery
如何使用 Gmail API、OAuth2 for Apps 脚本和域范围委派为 G Suite 域中的用户设置电子邮件签名