【发布时间】:2013-02-10 21:35:48
【问题描述】:
我正在使用 Contacts API v3 在 Google Apps Script Web 应用程序中工作,以访问域内所有用户的联系人。
到目前为止,我对联系人 API 请求没有任何问题,但我还不知道如何获得跨域的授权以访问任何用户的联系人(除了我之外)。
我已尝试使用 cpanel - 高级工具中的 OAuth 域密钥,但到目前为止没有任何结果。与域内的其他用户一起尝试时,我收到“请求返回代码 403(禁止)失败”
提前致谢,福斯托
EDIT-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)
}
提前感谢您的帮助!福斯托
【问题讨论】:
-
不确定你是否感兴趣,但你看过 Romain Vialard 带来的new library 吗?
-
确实很感兴趣,已经看过了。但是,这是针对位于域级别的配置文件 api,而我需要的是联系人 api,它需要 2 条腿访问权限才能在所有域用户的联系人中工作……我猜(目前还不确定)
-
使用Google APIs Console 代替域cpanel 域密钥来设置API 访问配置文件,该配置文件将生成一个简单的API 访问令牌。
-
我对@Jonathon 的建议感到很兴奋,但是当我在 API 控制台上创建一个新项目时,我在可用的服务中找不到联系人 API 来激活......我错过了什么吗?
-
它不需要特定的激活(我想我记得它曾经是)但这是管理应用特定访问令牌的最佳方式
标签: google-apps-script google-api google-contacts-api