Bei Verwendung der Google-API ist ein Fehler in Bezug auf den Authentifizierungsumfang aufgetreten.

Ich habe Google SDK so eingerichtet, dass Google API mit @ verwendet wirApplication Default Credentials. Für meinen lokalen Computer eine Anmeldeinformationen-JSON-Datei erstellt und deren Pfad als @ festgelegGOOGLE_APPLICATION_CREDENTIALS als Umgebungsvariable. Dies funktioniert wie erwartet ohne Probleme.

Wenn die App jedoch in Google Cloud VM bereitgestellt wird, wird der folgende Fehler ausgegeben:

[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"                                      
    }                                                                    
}

Laut demDokumentatio, das integrierte Dienstkonto sollte der Instanz der virtuellen Maschine zugeordnet sein. Damit es funktioniert, habe ich versucht, die json-Datei für Anmeldeinformationen wie auf dem lokalen Computer zu verwenden (was gut funktioniert hat), aber es hat auch nicht funktioniert.

Zu beachten ist, dass sich die Fehlermeldung auf Bereiche bezieht, jedoch nicht auf das Auth-Problem. Was ist zu tun, damit es auf der Compute Engine VM-Instanz funktioniert?

Um den Client-Initialisierungscode anzugeben:

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Pubsub::PUBSUB);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage