首页 > 解决方案 > 401 Unauthorized - Chrome 应用 Oauth 调用 Google Cloud Functions

问题描述

我正在关注这个:https ://developer.chrome.com/apps/tut_oauth

但它不起作用。当我调用 Cloud Function 时,我收到 401 错误。Authorization: Bearer "access-token" 被添加到请求头中。尽管此处的另一个问题[1] 指出应该使用 ID_TOKEN。我通过 curl 尝试过但有相同的 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]为什么授予“allAuthenticatedUsers”成员“Cloud Functions Invoker”角色对谷歌云功能不起作用?

标签: oauthgoogle-cloud-functionsgoogle-chrome-app

解决方案


您提到的教程使用“access-token”通过 Google People API 和 Chrome Identity API 访问用户的 Google 联系人。

如果您想访问不允许未经身份验证的调用的 Google Cloud 功能,必须使用ID_TOKEN

对于测试,您可以使用 创建一个服务帐户--role="roles/cloudfunctions.invoker",然后创建一个key.json文件并导出GOOGLE_APPLICATION_CREDENTIALSenv 变量链接

最后你可以使用:

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

推荐阅读