使用 Google API 时出现身份验证范围不足错误

问题描述 投票:0回答:3

我设置 Google SDK 以使用 Google API 和 应用程序默认凭据。对于我的本地计算机,创建了一个凭据 json 文件并将其路径设置为

GOOGLE_APPLICATION_CREDENTIALS
作为环境变量。这按预期工作,没有问题。

但是,当应用程序部署到 Google Cloud VM 时,会抛出以下错误:

[Google_Service_Exception]                                             
{                                                                      
    "error": {                                                           
      "code": 403,                                                       
      "message": "Request had insufficient authentication scopes.",      
      "errors": [                                                        
        {                                                                
          "message": "Request had insufficient authentication scopes.",  
          "domain": "global",                                            
          "reason": "forbidden"                                          
        }                                                                
      ],                                                                 
      "status": "PERMISSION_DENIED"                                      
    }                                                                    
}

根据文档,内置服务帐户应与虚拟机实例关联。为了使其工作,我尝试使用凭据 json 文件,就像在本地计算机上所做的那样(工作正常),但它也不起作用。

需要注意的是,错误消息是关于范围的,而不是身份验证问题。如何才能使其在 Compute Engine 虚拟机实例上运行?

给客户端初始化代码:

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Pubsub::PUBSUB);
google-api google-compute-engine google-api-php-client google-api-client
3个回答
12
投票

更新

现已支持。您必须stop实例才能更改API范围。 https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes

原答案

事实证明,我必须在 Google Cloud Console 上为虚拟机实例详细信息启用服务的 Cloud API 访问范围:https://console.cloud.google.com/compute/instances

不幸的是,我无法更改它,因为 Google Cloud 目前不支持它。我必须启动一个新实例才能启用服务 API 访问。 https://googlecloudplatform.uservoice.com/forums/302595-compute-engine/suggestions/13101552-ability-to-change-cloud-api-access-scopes-on-lauc


2
投票

现在可以了。您的实例必须停止,然后可以通过编辑虚拟机页面中的控制台或在 SDK 中使用以下命令更改其范围列表:


gcloud compute instances stop [vmname]
gcloud beta compute instances set-scopes [vmname] --scopes="[scopes list]"

请注意,使用 SDK 方式时,第二个命令将使用列表中的范围进行重置。目前无法仅附加新范围。


0
投票

这是我的错误案例:

Headers: Metadata(content-type=application/grpc,www-authenticate=Bearer realm="https://accounts.google.com/", error="insufficient_scope", scope="https://www.googleapis.com/auth/adwords https://adwords.google.com/api/adwords https://adwords.google.com/api/adwords/ https://adwords.google.com/api/adwords/cm",date=Thu, 28 Mar 2024 17:00:59 GMT)

那个

© www.soinside.com 2019 - 2024. All rights reserved.