Я пытаюсь создать приложение, которое (используя учетную запись службы Диска) перечисляет файлы в данной папке и позволяет пользователям искать содержимое этих файлов. Я получаю ошибку 403 Insufficient Permissions
которые я не могу объяснить.
Я редактировал код из примера API-интерфейса Google API :
$client_id = '[REMOVED]'; //Client ID $service_account_name = '[REMOVED]'; //Email Address $key_file_location = 'key.p12'; //key.p12 $client = new Google_Client(); $client->setApplicationName("Client_Library_Examples"); service = new Google_Service_Drive($client); if (isset($_SESSION['service_token'])) { $client->setAccessToken($_SESSION['service_token']); } $key = file_get_contents($key_file_location); $cred = new Google_Auth_AssertionCredentials( $service_account_name, array( 'https://www.googleapis.com/auth/drive', 'https://www.googleapis.com/auth/drive.file' ), $key ); $client->setAssertionCredentials($cred); if ($client->getAuth()->isAccessTokenExpired()) { $client->getAuth()->refreshTokenWithAssertion($cred); } $_SESSION['service_token'] = $client->getAccessToken(); $result = array(); $pageToken = NULL; do { try { $parameters = array(); if ($pageToken) { $parameters['pageToken'] = $pageToken; } $files = $service->files->listFiles($parameters); $result = array_merge($result, $files->getItems()); $pageToken = $files->getNextPageToken(); } catch (Exception $e) { echo "<br/>An error occurred: " . $e->getMessage(); $pageToken = NULL; } } while ($pageToken); echo "<pre>"; print_r($result); echo "</pre>"; echo "<br />Execution completed.";
Точное сообщение об ошибке ( $e->getMessage()
в catch
выше) – это Error calling GET https://www.googleapis.com/drive/v2/files: (403) Insufficient Permission
– я думал, что / drive и / Параметры drive.file дали мне все необходимые разрешения?
Во-первых, быстрое примечание: вы запрашиваете как область Drive
и область Drive.File
. Позже это подмножество первого, поэтому нет необходимости запрашивать его. Вы должны удалить строку 'https://www.googleapis.com/auth/drive.file'
.
Что касается недостаточных разрешений, это возможно из-за неправильной конфигурации консоли разработчика. Вы должны дважды проверить, что API и SDK включены для этого конкретного проекта.
Я была такая же проблема. Я создал новый секрет в консоли разработчика Google и повторно аутентифицирован. Это поставило проблему.