1

ドメイン内のすべてのユーザーの連絡先にアクセスするために、Contacts API v3 を使用して Google Apps Script Web アプリで作業しています。

これまで Contacts API リクエストに問題はありませんでしたが、ドメイン全体で (私以外の) ユーザーの連絡先にアクセスするための承認を取得する方法についてはまだわかりません。

cpanel - 高度なツールから OAuth ドメイン キーを試しましたが、これまでのところ結果はありません。ドメイン内の他のユーザーと試してみると、「返されたコード 403 の要求が失敗しました (禁止されています)」というメッセージが表示されました

前もってありがとう、ファウスト

EDIT-1 (2005 年 3 月) 近づいてきましたが、少し助けが必要です

2LO (2-legged 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)
}

助けてくれてありがとう!! ファウスト

4

2 に答える 2

2

まず、署名を計算する前に、すべてのパラメーターを適切に URL エンコードする必要があります。次に、引用符を削除します。特にベース文字列では、引用符は必要ありません。第三に、指定している署名方法、つまり HMAC-SHA1 を使用する必要があります。最後に、OAuth トークンを使用していなくても、暗号化キーに「&」を含める必要があります。

正しく動作するコードは次のとおりです。

  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);
于 2013-03-11T18:55:07.223 に答える
0

私はあなたがここで言及したような連絡先へのアクセスを実行していませんが、ドメインユーザーとして機能し、ユーザーのGoogleドライブにアクセスするために同様のアクションを実行することができました。これに対する1つの制限要因は、あなたがしていることを実行できることでした。あなたがGoogleドメインのスーパー管理者である必要があり、私が使用しなければならなかったアクセスレベルはURLリクエストとREST APIを介してでした。また、 Googleドメイン共有連絡先APIを見て何ができるかを確認する必要があります。Googleドメインで共有の連絡先を管理し、全員の個人の連絡先を自分で管理できるようにします

于 2013-02-26T11:48:26.713 に答える