Google cloud platform 如何从AppMaker调用REST谷歌云API?

Google cloud platform 如何从AppMaker调用REST谷歌云API?,google-cloud-platform,google-app-maker,google-cloud-ml,google-cloud-automl,Google Cloud Platform,Google App Maker,Google Cloud Ml,Google Cloud Automl,我想从AppMaker调用Google Cloud AutoML API,但很难弄清楚如何做到这一点。如何从AppMaker向Google Cloud进行REST调用?首先,按照说明生成服务帐户并下载私钥。(我还假设您已经为您的项目启用了API。) 然后,按照“附录:无OAuth的服务帐户授权”一节中的说明进行操作,但您需要实现自己的JWT编码算法,如下所示: var base64Encode = function (str) { var encoded = Utilities.base

我想从AppMaker调用Google Cloud AutoML API,但很难弄清楚如何做到这一点。如何从AppMaker向Google Cloud进行REST调用?

首先,按照说明生成服务帐户并下载私钥。(我还假设您已经为您的项目启用了API。)

然后,按照“附录:无OAuth的服务帐户授权”一节中的说明进行操作,但您需要实现自己的JWT编码算法,如下所示:

var base64Encode = function (str) {
    var encoded = Utilities.base64EncodeWebSafe(str);
    // Remove padding
    return encoded.replace(/=+$/, '');
};

// https://developers.google.com/identity/protocols/OAuth2ServiceAccount
// https://wtfruby.com/gas/2018/11/21/jwt-app-scripts.html

var getJWT = function (secret) {
    var header = JSON.stringify({
        typ: 'JWT',
        alg: 'RS256',
        kid: '...'
    });
    var encodedHeader = base64Encode(header);
    var iat = new Date().getTime() / 1000;
    var exp = iat + 3600;
    var payload = JSON.stringify({
      iss: "...",
      sub: "...",
      aud: "https://automl.googleapis.com/",
      iat: iat,
      exp: exp
    });
    var encodedPayload = base64Encode(payload);
    var toSign = [encodedHeader, encodedPayload].join('.');
    var signature = Utilities.computeRsaSha256Signature(toSign, secret);
    var encodedSignature = base64Encode(signature);
    return [toSign, encodedSignature].join('.');
};
function makeRestCall() {

  var jwt = getJWT();
  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer ' + jwt, 
    },
    'muteHttpExceptions': true,
    'payload' : ...
  };

  var url = 'https://automl.googleapis.com/...';  
  return JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
}
  • 从服务定义文件中获取API的服务名称和API名称
  • 对于标头中的kid字段,指定服务帐户的私钥 ID。您可以在您的帐户的private_key_ID字段中找到此值 服务帐户JSON文件
  • 对于iss和子字段,请指定 服务帐户的电子邮件地址。您可以在 服务帐户JSON文件的client_电子邮件字段
  • 澳元 字段中的值指定 服务定义文件
  • 对于iat字段,指定当前Unix 时间,对于exp字段,指定3600秒的精确时间 稍后,JWT将到期
使用RSA-256对JWT进行签名 在服务帐户JSON文件中找到私钥

然后按如下方式拨打剩余电话:

var base64Encode = function (str) {
    var encoded = Utilities.base64EncodeWebSafe(str);
    // Remove padding
    return encoded.replace(/=+$/, '');
};

// https://developers.google.com/identity/protocols/OAuth2ServiceAccount
// https://wtfruby.com/gas/2018/11/21/jwt-app-scripts.html

var getJWT = function (secret) {
    var header = JSON.stringify({
        typ: 'JWT',
        alg: 'RS256',
        kid: '...'
    });
    var encodedHeader = base64Encode(header);
    var iat = new Date().getTime() / 1000;
    var exp = iat + 3600;
    var payload = JSON.stringify({
      iss: "...",
      sub: "...",
      aud: "https://automl.googleapis.com/",
      iat: iat,
      exp: exp
    });
    var encodedPayload = base64Encode(payload);
    var toSign = [encodedHeader, encodedPayload].join('.');
    var signature = Utilities.computeRsaSha256Signature(toSign, secret);
    var encodedSignature = base64Encode(signature);
    return [toSign, encodedSignature].join('.');
};
function makeRestCall() {

  var jwt = getJWT();
  var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer ' + jwt, 
    },
    'muteHttpExceptions': true,
    'payload' : ...
  };

  var url = 'https://automl.googleapis.com/...';  
  return JSON.parse(UrlFetchApp.fetch(url, options).getContentText());
}