Page 1 of 1

Google Directory API gibt 403 zurück: "Nicht autorisiert, auf diese Ressource/API zuzugreifen" für den OAuth -Client in

Posted: 15 May 2025, 17:42
by Anonymous
Ich habe eine Web -App mit PHP (LaRavel genauer, aber keine Rolle), in der ich die Google OAuth 2.0 -Authentifizierung für Benutzer in den GOOGLE -Arbeitsspitzen von Customer implementiere. Der Veröffentlichungsstatus der App lautet derzeit "Testen" und der Benutzertyp ist "extern". />[*]https://www.googleapis.com/auth/userinfo.profile
[*]https://www.googleapis.com/auth/admin.d ... eadonly/li>
https://www.googleapis.com/auth/admin.d ... p.readonly

Weiter für den App -Bildschirm < /li>
Bildschirmeinvertretungsbildschirm < /li>
< /ol>
Nachdem der Benutzer nach dem Umbau des Benutzer -API wieder in mein Web -App erhalte.

Code: Select all

Google\Service\Exception
{ "error": { "code": 403, "message": "Not Authorized to access this resource/api", "errors": [ { "message": "Not Authorized to access this resource/api", "domain": "global", "reason": "forbidden" } ] } }
< /code>
Bisher hat meine Web -App nur Microsoft Entra ID -Mieter und ihre Benutzer unterstützt, wo ich eine ähnliche OAuth 2.0 -App habe. Wenn Microsoft -Mieter -Kunden meine App verwenden, muss der Administrator Benutzer die Einwilligung der Verwaltung im Namen der gesamten Organisation für die Scopes My Web App -Anforderungen erteilen. Danach muss keiner der Benutzer (selbst reguläre Nicht-Admin-Benutzer) jemals Berechtigungen erteilen oder Einverständniserklärungen sehen (nicht einmal beim ersten Mal mit der App). Wo ich den Benutzer aus meiner Web -App zur Authentifizierung von Google umleichte (nur die relevanten Teile): < /p>
$client = new Google\Client();

$client->setClientId(env('GOOGLE_APP_CLIENT_ID'));
$client->setClientSecret(env('GOOGLE_APP_CLIENT_SECRET'));
$client->setRedirectUri('http://localhost/login/google-callback'); // Local testing
$client->setAccessType('offline');
$client->setPrompt('consent');
$client->setScopes([
'openid',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/admin.directory.user.readonly',
'https://www.googleapis.com/auth/admin.directory.group.readonly',
]);
$client->setHostedDomain($tenant->domainName);

$authUrl = $client->createAuthUrl();
return redirect()->away($authUrl);
< /code>
Code, wenn Google den Benutzer wieder in meine Web -App umleitet (nur die relevanten Teile): < /p>
$client = new Google\Client();

$client->setClientId(env('GOOGLE_APP_CLIENT_ID'));
$client->setClientSecret(env('GOOGLE_APP_CLIENT_SECRET'));
$client->setRedirectUri('http://localhost/login/google-callback'); // Local testing

$code = $request->query('code');
$token = $client->fetchAccessTokenWithAuthCode($code);
$client->setAccessToken($token);

$idToken = $token['id_token'];
$payload = $client->verifyIdToken($idToken);

$email = $payload['email'] ?? null;

$directoryService = new Google\Service\Directory($client);

// This is the line which causes the exception!
$user = $directoryService->users->get($email, [
'fields' => 'id,primaryEmail,name',
]);

dd($user); // Debug