8

我一直在尝试在Google 应用程序脚本中使用 oAuth来访问 trello 数据,但似乎 OAuthService API 对 oAuth 服务做出了一些假设,并且 trello 不能以这种方式工作。

以下代码有效。它可以访问 twitter(来自 google 的 oauth 教程):

function authorizeToTwitter() {
  var oauthConfig = UrlFetchApp.addOAuthService("twitter");
  oauthConfig.setAccessTokenUrl("https://api.twitter.com/oauth/access_token");
  oauthConfig.setRequestTokenUrl("https://api.twitter.com/oauth/request_token");
  oauthConfig.setAuthorizationUrl("https://api.twitter.com/oauth/authorize");
  oauthConfig.setConsumerKey(<CONSUMER KEY>);
  oauthConfig.setConsumerSecret(<CONSUMER SECRET>);
  var requestData = {
    "method": "GET",
    "oAuthServiceName": "twitter",
    "oAuthUseToken": "always"
  };
  var result = UrlFetchApp.fetch("https://api.twitter.com/1/statuses/mentions.json", requestData);
}

以下代码将让我进入 trello“按确定返回”页面,但 trello 不知道如何重定向回来,所以我进入一个页面,要求我手动复制粘贴令牌(但谷歌不为我提供插入该令牌的方法)

function authorizeToTrello() {
  var oauthConfig = UrlFetchApp.addOAuthService("trello");
  oauthConfig.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken");
  oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken");
  oauthConfig.setConsumerKey(<CONSUMER KEY>);
  oauthConfig.setConsumerSecret(<CONSUMER SECRET>);
  var requestData = {
    "method": "GET",
    "oAuthServiceName": "trello",
    "oAuthUseToken": "always"
  };
  var result = UrlFetchApp.fetch(
      "https://api.trello.com/1/members/me/boards",
      requestData);
}

我试图通过在授权 url 中手动添加我提供给 twitter 的重定向回调来解决这个问题

oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken?return_url=https://docs.google.com/macros"); //this is what the tutorial says I should provide to twitter

或者

oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken?return_url=https://docs.google.com/macros/externaloauthcallback"); //this is what twitter actually calls when performing the oauth dance

但两者都不起作用。难道我做错了什么?我是否缺少一些我应该提供的配置参数?

4

1 回答 1

10

此行为是由Trello API 中的错误引起的;Google 正在尝试提供一个oauth_callback何时获取其授权令牌,但当您批准令牌请求时,Trello 并未重定向到那里。

此错误已得到解决,并且我已验证以下代码有效:

function authorizeToTrello() {
  var oauthConfig = UrlFetchApp.addOAuthService("trello");
  oauthConfig.setAccessTokenUrl("https://trello.com/1/OAuthGetAccessToken");
  oauthConfig.setRequestTokenUrl("https://trello.com/1/OAuthGetRequestToken");
  oauthConfig.setAuthorizationUrl("https://trello.com/1/OAuthAuthorizeToken");

  // Replace these with the values you get from 
  // https://trello.com/1/appKey/generate
  oauthConfig.setConsumerKey("Consumer Key");
  oauthConfig.setConsumerSecret("Consumer Secret");

  var requestData = {
    "method": "GET",
    "oAuthServiceName": "trello",
    "oAuthUseToken": "always"
  };

  var result = UrlFetchApp.fetch(
      "https://api.trello.com/1/members/me/boards",
      requestData);

  Logger.log(result.getContentText());
}
于 2012-04-26T16:03:06.530 回答