401未经授权-Chrome应用程序Oauth调用谷歌云功能

401未经授权-Chrome应用程序Oauth调用谷歌云功能,oauth,google-cloud-functions,google-chrome-app,Oauth,Google Cloud Functions,Google Chrome App,我是这样说的: 但它不起作用。当我调用云函数时,我得到401错误。在请求头中添加授权:承载“访问令牌”。尽管这里的另一个问题[1]指出应该使用ID_令牌。我试着通过旋度,但有相同的401错误 chrome.identity.getAuthToken({interactive: true}, function(token) { var dat = { "user_email":email_id, "user_id":user_id }; $.ajax({

我是这样说的:

但它不起作用。当我调用云函数时,我得到401错误。在请求头中添加授权:承载“访问令牌”。尽管这里的另一个问题[1]指出应该使用ID_令牌。我试着通过旋度,但有相同的401错误

chrome.identity.getAuthToken({interactive: true}, function(token) {
        var dat = {
"user_email":email_id,
"user_id":user_id
};
     $.ajax({
        type: "POST",
        data:dat,
         dataType: 'json',
   url:str,
    contentType: "application/json",
         error: function (xhr, status, error) {
        console.log(xhr)
    }, success: function (data, status, xhr) {
        console.log('Success!' +data + status);
    },
      headers:{  
      'x-goog-project-id': 'xxxxxxxxxxxxx',
   'Authorization': 'Bearer ' + token,
   'Content-Type':'application/json',
   'Accept': 'application/json'
  }
    });
     });

[1]

您提到的教程使用“访问令牌”使用Google People API和Chrome Identity API访问用户的Google联系人

如果您想访问不允许未经验证的调用的谷歌云功能,您必须使用ID\u令牌

对于测试,您可以使用
--role=“roles/cloudfunctions.invoker”
创建一个服务帐户,然后创建一个
key.json
文件并导出
GOOGLE\u应用程序\u凭证
env变量

最后,您可以使用:

curl "https://us-central1-your-project.cloudfunctions.net/yourfunction"
# Error 403 (Forbidden)
curl "https://us-central1-your-project.cloudfunctions.net/yourfunction"   -H "Authorization: bearer $(gcloud auth print-identity-token)"
#Success

我放弃了这一点,因为在Chrome应用程序中使用oauth调用云函数并没有直接的解决方案。另一种可行的解决方案是通过API密钥进行身份验证。这就是使用云端点的云函数

我遵循了这里的逻辑:


但需要注意的是,API键的旋转应该定期自动完成。

感谢您的澄清。但是,我如何在chrome扩展应用程序(Javascript)中使用服务帐户?我建议遵循本教程,然后阅读我查看的教程,但它不包括chrome扩展和服务帐户之间的身份验证部分。我也已经检查了OpenID连接文档,但是没有一个应用于Chrome扩展,因为它不被认为是Web应用程序。看起来这不是一个简单的任务,这里是一个关于它的讨论。