Скрипт приложений Google OAuth Connect не работает с Trello

Я пытался использовать oAuth в скрипте приложений Google для доступа к данным Trello, но кажется, что OAuthService API делает некоторые предположения о службе oAuth, и trello не работает таким образом.

Следующий код работает. Он получает доступ к твиттеру (это из учебника 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 не знает, как выполнить обратное перенаправление, поэтому я попадаю на страницу, которая просит меня вручную скопировать и вставить токен (но Google не предоставьте мне способ вставки этого токена)

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);
}

Я попытался исправить это, вручную добавив обратный вызов перенаправления, который я предоставляю в Twitter, в URL-адресе авторизации.

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

or

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

Но оба не работают. Я делаю что-то неправильно? Мне не хватает некоторых параметров конфигурации, которые я должен предоставить?


person Jauco    schedule 26.04.2012    source источник
comment
Исправлена ​​ошибка, из-за которой возникла эта проблема.   -  person Daniel LeCheminant    schedule 03.05.2012


Ответы (1)


Такое поведение было вызвано ошибкой в ​​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());
}
person Daniel LeCheminant    schedule 26.04.2012
comment
Спасибо! И за ответ, и (я думаю) за исправление ошибки! - person Jauco; 27.04.2012
comment
Да, я тоже это проверил. - person Jauco; 04.05.2012