2

我想知道如何在 Google Apps 脚本中使用 oAuth2.0。

我想在 picasa 中使用它。这是我的授权代码:

var url = "https://accounts.google.com/o/oauth2/auth?redirect_uri=https%3A%2F%2Fscript.google.com%2Foauth2callback&response_type=code&client_id=" + My_Client_Id + "&approval_prompt=force&scope=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2F&access_type=offline&"
var option = {oAuthUseToken: "always", oAuthServiceName: "lh2"};
var response = UrlFetchApp.fetch(url, option);

但是授权失败。

我知道 Google 已经编写了一个链接 picasa 的示例(https://developers.google.com/apps-script/articles/picasa_google_apis)。但是,它是用于客户端登录的。我想做的是在一些照片中添加一些标签。因此不能使用示例。

4

2 回答 2

2

从我可以看到你是 urlFetchApp 目前只支持 OAuth1.0。我将查看此处概述的使用 OAuth 2.0 https://developers.google.com/picasa-web/docs/2.0/developers_guide_protocol#Auth的步骤。我实际上并没有使用 Picasa 身份验证,但我已经通过 Facebook 为我的网站设置了 OAuth 2.0 身份验证,因此其中一些可能很有用 - 这一切都在我的博客http://socialsamplr.blogspot.co.nz/上。

问候,丹尼尔

于 2012-09-10T18:35:47.893 回答
1

简短的回答

按照https://github.com/googlesamples/apps-script-oauth2中的说明进行操作

解释

我尝试使用Picasa 服务库,但身份验证过程未完成,因此我获取了库源代码,适用于使用来自https://github.com/googlesamples/apps-script-oauth2的 OAuth 文件。我将结果发布到https://gist.github.com/rubenrivera/97cf176b8787d04e10929adf6aa7ae5f

遵循的步骤

  1. 从 Google Developers Console 获得了我自己的 CLIENT_ID 和 CLIENT_SECRET
  2. 添加了 SERVICE、SERVICE_URL、SCOPE 作为全局变量,以便以后可以轻松地将 OAuth2 与其他服务一起使用。
//使用 Picasa 网络相册 API 的全局变量
var SERVICE_ = 'lh2';
var SCOPE_ = 'http://picasaweb.google.com/data/';
var SERVICE_URL_ = 'https://picasaweb.google.com/data/feed/api/user/default';

// 项目的全局变量。从 Google Developers Console 获得
var CLIENT_ID_ = '...';
var CLIENT_SECRET_ = '...';

注意:步骤 3 和 4 是可选的。另一种方法是从相关库中添加它们

  1. 将 OAuth2 脚本文件替换为来自https://github.com/googlesamples/apps-script-oauth2/tree/master/dist/OAuth2.gs的同名文件。
  2. 从https://github.com/googlesamples/apps-script-oauth2/blob/master/dist/Underscore.gs添加了下划线文件。
  3. 运行以下代码获取重定向 URI 并在 Google Developers Console 中注册
/**
 * 记录 redict URI 以在 Google Developers Console 中注册。
 */
函数 logRedirectUri() {
  var service = getService();
  Logger.log(service.getRedirectUri());
}
  1. 从 Google Developer Console 获取 CLIENT_I 和 CLIENT_SECRET
  2. 运行以下代码对脚本进行授权。获取显示的 URL 并从新选项卡运行它。
/**
 * 授权并向 API 发出请求。
 */
函数运行(){
  var service = getService();
  if (service.hasAccess()) {
    var url = SERVICE_URL;
    var response = UrlFetchApp.fetch(url, {
      标题:{
        授权:'Bearer' + service.getAccessToken()
      }
    });
    尝试 {
      var 结果 = JSON.parse(response.getContentText());
      Logger.log(JSON.stringify(result, null, 2));
    } 捕捉(e){
      var 结果 = Xml.parse(response.getContentText(),true);
      Logger.log(result.toXmlString());
    }
  } 别的 {
    var authenticationUrl = service.getAuthorizationUrl();
    Logger.log('打开以下 URL 并重新运行脚本:%s',
        授权网址);
  }
}
  1. 注释掉原来的 googleOAuth_()
  2. 添加了以下代码函数 googleOAuth_() { var service = getService(); return { headers: { Authorization: 'Bearer' + service.getAccessToken() } } }
于 2016-10-19T23:26:08.210 回答