0

我正在尝试编写一个 Chrome 扩展程序,该扩展程序从网站获取文本并通过 Google Cloud 上的自定义 AutoML 自然语言模型运行它,然后将预测数据显示到屏幕上。

我尝试过使用 OAuth2 进行身份验证,这给了我 Permission denied 错误,并且文档说要设置一个服务帐户。我还没有弄清楚如何将 chrome 扩展程序变成服务帐户,但我发现有人建议我必须设置一个单独的 Node.JS 服务器并以这种方式中继查询。

在 manifest.js 我有:

"oauth2": {
    "client_id": "{account_id}.apps.googleusercontent.com",
    "scopes":["https://www.googleapis.com/auth/cloud-platform"]
 }

在 background.js 我有:

let authToken = '';
chrome.identity.getAuthToken({interactive: true}, function(token) {

    authToken = token;
    fetch("https://automl.googleapis.com/v1beta1/{name}:predict", {

    method: "POST",
    body: `{ 
        "payload": {
            "textSnippet": { 
                "content": "TEXT TO PREDICT GOES HERE", 
                "mime_type": "text/plain"
            }, 
        }  
    }`,
    headers: {
        Authorization: "Bearer " + authToken,
        "Content-Type": "application/json"
    }
    }).then(response => response.text())
    .then(data => console.log(data));
  });

这是文档中描述的 curl 请求的翻译,转换为 fetch 请求。我越来越

{
    "error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
    }
}

据我所知,该帐户已正确设置并获得了 Google Cloud 端的权限。有人看到这里发生了什么吗?

4

1 回答 1

1

所以,再纠结这个问题后,最终答案是否定的,不能直接查询,Chrome 扩展功能不是很强大。我找到的解决方案是在与 AutoML 模型相同的 Cloud Platform 帐户上创建一个 Google Cloud Function,并使用 fetch 将 HTTP 请求从 Chrome 扩展发送到 Cloud Function。我将 Cloud Function 设为服务帐户并导入了 Node.JS AutoML API 客户端,用于查询 AutoML 并将结果返回到扩展程序。我希望这对某人有帮助。

于 2019-04-22T18:30:27.397 回答