0

Ich habe die Richtungen hier gefolgt https://developers.google.com/api-client-library/php/auth/service-accountsGooglephpapi Verwaltung von Benutzern mit Dienstkonto

Ich habe die Bereiche für die Client-ID meines Dienstkonto in der Admin-Konsole von

https://www.googleapis.com/auth/admin.directory.group 
https://www.googleapis.com/auth/admin.directory.user 
https://www.googleapis.com/auth/admin.directory.customer 
https://www.googleapis.com/auth/admin.directory.domain 

hinzugefügt Hier finden Sie der Code I

putenv('GOOGLE_APPLICATION_CREDENTIALS=JSONFILELOCATION'); 
$client = new Google_Client(); 
$client->useApplicationDefaultCredentials(); 
$client->setApplicationName("Directory"); 
$client->setScopes(array(
    Google_Service_Directory::ADMIN_DIRECTORY_CUSTOMER, 
    Google_Service_Directory::ADMIN_DIRECTORY_USER 
)); 
$client->setSubject("[email protected]"); 
//$client->setSubject(SUPERADMINEMAILADDRESS); 

$service = new Google_Service_Directory($client); 
// Print the first 10 users in the domain. 
$optParams = array(
    'domain'=>'MYDOMAIN', 
    'maxResults' => 10, 
    'orderBy' => 'email', 
); 
$results = $service->users->listUsers($optParams); 

das Ergebnis ich laufen bin versucht nicht autorisierter Client

Fatal error: Uncaught exception 'Google_Service_Exception' with message '{ 
"error": "unauthorized_client", 
"error_description": "Unauthorized client or scope in request." 
} 
' in /var/web/composer/googlephpapi/vendor/google/apiclient/src/Google/Http/REST.php:118 
Stack trace: 
#0 /var/web/composer/googlephpapi/vendor/google/apiclient/src/Google/Http/REST.php(94): Google_Http_REST::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') 
#1 [internal function]: Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') 
#2 /var/web/composer/googlephpapi/vendor/google/apiclient/src/Google/Task/Runner.php(181): call_user_func_array(Array, Array) 
#3 /var/web/composer/googlephpapi/vendor/google/apiclient/src/Google/Http/REST.php(58): Google_Task_Runner->run() 
#4 /var/web/composer/googlephpapi/vendor/google/apiclient/src/Google/Client.php(781): Google_Http_REST::execute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), in /var/web/composer/googlephpapi/vendor/google/apiclient/src/Google/Http/REST.php on line 118 

Ich versuche, die E-Mail-Adresse der Dienstkonten zu verwenden. Aber ich bekomme den Erlaubnisfehler. Wenn ich eine Super Admins E-Mail-Adresse verwende, bekomme ich gute Ergebnisse. Gibt es eine Einstellung, die ich vermisse, um das Dienstkonto verwenden zu können? Ich dachte, die Delegierung der Domäne würde mir erlauben, das Dienstkonto zu verwenden, um vollen Zugang zu haben, ohne einen wirklichen Benutzer zu verwenden.

+0

Da es sich bei dem Dienstkonto nicht um einen Superadministrator handelt, erhalten Sie einen nicht autorisierten "Client". Sie können ein Dienstkonto nur verwenden, um ** einen Benutzer als Benutzer zu imitieren. Daher sollte das Thema immer der Super Admin des Accounts sein. – Morfinismo

Antwort

0

Hier ist ein anderes Beispiel zum ausprobieren.

define('SCOPES', implode(' ', array(Google_Service_Directory::ADMIN_DIRECTORY_USER))); 

    putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $path_to_json_creds_file); 

    $client = new Google_Client(); 
    $client->useApplicationDefaultCredentials(); // loads whats in that json service account file. 
    $client->setScopes(SCOPES); // adds the scopes 
    $client->setSubject($domainUserWithAdminRoles); // An org account with special roles defined. 

    $dir = new Google_Service_Directory($client); 

    // get the account. 
    $results = $dir->users->get($userKey); 

    print_r($results); 
Verwandte Themen