使用Google应用程序脚本跨域访问API联系人授权



我正在使用Contacts API v3的Google Apps Script web应用程序中工作,以访问域中所有用户的联系人。

到目前为止,我对联系人API请求没有任何问题,但我还不知道如何通过域获得访问任何用户联系人(除了我(的授权。

我已经尝试过cpanel高级工具中的OAuth域密钥,但到目前为止没有结果。在尝试域内的其他用户时,我得到了"请求返回代码403失败(禁止(">

提前感谢Fausto

编辑-1(3月5日(我现在更近了,但需要的帮助

我已经将2LO(2-格OAuth(与OAuth_signature和签名请求结合在一起,但仍然得到错误401(客户端错误(!!1.这是我现在使用的示例代码。

function test_xOAuth() {
  // OAUTH_CONSUMER_SECRET from GApps: control panel > advanced tools > Manage OAuth domain key 
  var domain = Session.getEffectiveUser().getEmail().split("@")[1];
  var xuser = 'fausto@thexs.ca';
  var method = "GET";
  var baseUrl = "https://www.google.com/m8/feeds/groups/default/full";
  var timestamp = getTimestamp();
  var paramsJson = {
    oauth_consumer_key : domain,
    oauth_nonce : getNonce(timestamp),
    oauth_signature_method : "HMAC-SHA1",
    oauth_timestamp : timestamp,
    oauth_version : "1.0"
  };
  var paramsStringArray =  [];
  for (var k in paramsJson) paramsStringArray.push(k + '="' + paramsJson[k] + '"');
  var paramsString = paramsStringArray.join("&") + '&xoauth_requestor_id=' + xuser;
  var signatureBaseString = method +"&"+ encodeURIComponent(baseUrl) +"&"+ encodeURIComponent(paramsString);
  var signatureBytes = Utilities.computeHmacSha256Signature(signatureBaseString, OAUTH_CONSUMER_SECRET);
  var signature = Utilities.base64Encode(signatureBytes);
  var xoauthString = 'OAuth ' + paramsStringArray.join(",") + ',oauth_signature="' + signature + '"';
  var options = {
    method : method,
    headers : {"Authorization" : xoauthString}
  }
  var url = baseUrl + '?xoauth_requestor_id=' + 'fausto@thexs.ca';
  var response = UrlFetchApp.fetch(url, options);
  var responseHeader = response.getHeaders();
  var responseText = response.getContentText();
  return HtmlService.createHtmlOutput(responseText);
}
var getTimestamp = function(){
  return (Math.floor((new Date()).getTime() / 1000)).toString()
}
var getNonce = function(timestamp){
  return timestamp + Math.floor( Math.random() * 100000000)
}

提前感谢您的帮助!!Fausto

首先,在计算签名之前,您应该正确地对所有参数进行URL编码。第二,去掉引号,你并不真的需要它们,尤其是在基字符串中。第三,您应该使用您指定的签名方法,即HMAC-SHA1。最后但同样重要的是,尽管您没有使用OAuth令牌,但您仍然需要包含"&amp在加密密钥中。

以下是正常工作的代码:

  var OAUTH_CONSUMER_SECRET = 'you secret goes here';
  var domain = 'domain.tld';
  var username = 'test.user';
  var xuser = encodeURIComponent(username+'@'+domain);
  var method = "GET";
  var baseUrl = "https://www.google.com/m8/feeds/groups/default/full";
  var timestamp = Math.round(new Date().getTime() / 1000);
  var paramsJson = {
    oauth_consumer_key : domain,
    oauth_nonce : timestamp,
    oauth_signature_method : "HMAC-SHA1",
    oauth_timestamp : timestamp,
    oauth_version : "1.0"
  };
  var paramsStringArray =  [];
  for (var k in paramsJson) paramsStringArray.push(k + '=' + encodeURIComponent(paramsJson[k]));
  var paramsString = paramsStringArray.join("&") + "&xoauth_requestor_id="+xuser;
  var signatureBaseString = method +"&"+ encodeURIComponent(baseUrl) +"&"+ encodeURIComponent(paramsString);
  var signatureBytes = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_1, signatureBaseString, OAUTH_CONSUMER_SECRET+'&');
  var signature = encodeURIComponent(Utilities.base64Encode(signatureBytes));
  var xoauthString = 'OAuth ' + paramsStringArray.join(", ") + ', oauth_signature="' + signature + '"';
  var options = {
    method : method,
    headers : {authorization: xoauthString}
  }
  var url = baseUrl + '?xoauth_requestor_id=' + xuser;
  var response = UrlFetchApp.fetch(url, options);

我没有像你在这里提到的那样访问联系人,但我已经设法执行了类似的操作,作为域用户访问用户谷歌驱动器,其中一个限制因素是,要想做你想做的事情,你必须是你的Google域的超级管理员,我必须使用的访问级别是通过URL请求和REST API,您还可以查看Google域共享联系人API,以便能够在Google域中管理您的共享联系人,并让每个人的个人联系人由他们自己管理

相关内容

  • 没有找到相关文章

最新更新