使用Google Apps Script (OAuth v2)访问Shoeboxed API



我正试图通过Google Apps Script启动与Shoeboxed API的会话。我希望我可以使用应用程序脚本内部库访问它,但我有问题。下面是我的尝试:

function testAPI() {
var consumerKey = '';
var consumerSecret = '';
var oauthConfig = UrlFetchApp.addOAuthService('shoeboxed');
oauthConfig.setAccessTokenUrl(
'https://id.shoeboxed.com/oauth/token');
oauthConfig.setRequestTokenUrl(
'https://id.shoeboxed.com/oauth/token');
oauthConfig.setAuthorizationUrl(
'https://id.shoeboxed.com/oauth/authorize');
oauthConfig.setConsumerKey(consumerKey);
oauthConfig.setConsumerSecret(consumerSecret);
var options = {
  'oAuthServiceName' : 'shoeboxed',
  'oAuthUseToken' : 'always'
};
var url = 'https://api.shoeboxed.com/v2/user';
var response = UrlFetchApp.fetch(url, options);
Logger.log("Response: " + response.getContentText());
}

当它试图通过API url获取用户数据并显示授权失败消息时,它失败了。我不确定我做错了什么。有关API和OAuth的信息可以在这里找到:https://github.com/Shoeboxed/api/blob/master/sections/authentication.md

新方法:

看起来API需要OAuth2,但UrlFetchApp。addOAuthService方法只适用于旧版本的OAuth。

有一个新的方法ScriptApp.newStateToken()可以与OAuth2结合使用,但它需要对OAuth2步骤进行更多的手动/显式控制。它生成一个state令牌。

关于该方法的一个小细节:

请注意,当您构建URL时,state令牌应该作为.../authorize URL上的URL参数传递,而不是作为.../usercallback URL中的URL参数嵌入。

例如:

您希望将用户重定向到:

https://id.shoeboxed.com/oauth/authorize?client_id=<your client id>&response_type=code&scope=all&redirect_uri=<your site>&state=<CSRF token>

其中redirect_uri为:

https://script.google.com/macros/d/1234567890abcdefghijklmonpqrstuvwxyz/usercallback

当用户单击授权时,shoebox应该将它们重定向到:

https://script.google.com/macros/d/1234567890abcdefghijklmonpqrstuvwxyz/usercallback?state=<CSRF token>

oauth2对鞋盒API的支持刚刚被添加到cEzyOauth2 Google Apps Script库中。

你可以将模式复制到你的应用程序中,并包括这里描述的库

它使用Steve Lieberman所描述的状态令牌,并自动处理oauth2会话、令牌处理和刷新。

最新更新