【发布时间】:2020-03-04 15:25:22
【问题描述】:
我想从 AppMaker 调用 Google Cloud AutoML API,但很难弄清楚该怎么做。如何从 AppMaker 对 Google Cloud 进行 REST 调用?
【问题讨论】:
标签: google-cloud-platform google-app-maker google-cloud-ml google-cloud-automl
我想从 AppMaker 调用 Google Cloud AutoML API,但很难弄清楚该怎么做。如何从 AppMaker 对 Google Cloud 进行 REST 调用?
【问题讨论】:
标签: google-cloud-platform google-app-maker google-cloud-ml google-cloud-automl
首先,按照here的说明生成服务帐号并下载私钥。 (我还假设您已经为您的项目启用了 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('.');
};
使用 RSA-256 对 JWT 进行签名 在您的服务帐号 JSON 文件中找到私钥。
然后按如下方式进行 REST 调用:
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());
}
【讨论】: