Используйте Google Drive API "без" экрана аутентификации от php - PullRequest
1 голос
/ 03 мая 2020

Это сценарий, с которым я столкнулся. У меня есть веб-приложение с поддержкой php, из которого мне нужно получить доступ к некоторым ссылкам на файлы, которые есть в моей учетной записи Google Диска. Мне ТОЛЬКО нужен доступ к моим файлам в МОЕЙ учетной записи, потому что я храню одни и те же изображения, которые я должен предоставлять различным клиентам. Я попытался просмотреть документацию по Google Drive API, но мне не нужен OAuth и экран согласия. Приложение должно получить доступ к МОЕЙ учетной записи Google Drive в «фоновом режиме», просто чтобы получить некоторую информацию, которую оно должно представить клиентам, без необходимости что-либо делать.

Я читал очень похожие вопросы здесь, в StackOverflow, но никто из них не помог мне ... некоторые упоминают об использовании учетных записей служб, другие говорят, что они не используются для этой цели.

Не могли бы вы помочь мне понять, какой подход лучше всего подходит для этого сценария? Большое спасибо заранее!

1 Ответ

2 голосов
/ 03 мая 2020

То, что вы ищете, является служебной учетной записью. Сервисные учетные записи являются фиктивными пользователями, у них фактически есть собственная учетная запись Google Drive. Из-за того, что они являются пользователями, вы можете делиться с ними файлами, как и любой другой пользователь. Как только файл предоставлен учетной записи службы, он получает к нему доступ и может использовать его, как если бы вы входили в Oauth2, когда вы входите только в систему, вам не нужно входить в систему и давать согласие на доступ, поскольку вы уже настроили доступ.

require_once __DIR__ . '/vendor/autoload.php';

// Use the developers console and download your service account
// credentials in JSON format. Place the file in this directory or
// change the key file location if necessary.
putenv('GOOGLE_APPLICATION_CREDENTIALS='.__DIR__.'/service-account.json');

/**
 * Gets the Google client refreshing auth if needed.
 * Documentation: https://developers.google.com/identity/protocols/OAuth2ServiceAccount
 * Initializes a client object.
 * @return A google client object.
 */
function getGoogleClient() {
    return getServiceAccountClient();
}

/**
 * Builds the Google client object.
 * Documentation: https://developers.google.com/api-client-library/php/auth/service-accounts
 * Scopes will need to be changed depending upon the API's being accessed. 
 * array(Google_Service_Analytics::ANALYTICS_READONLY, Google_Service_Analytics::ANALYTICS)
 * List of Google Scopes: https://developers.google.com/identity/protocols/googlescopes
 * @return A google client object.
 */
function getServiceAccountClient() {
    try {   
        // Create and configure a new client object.        
        $client = new Google_Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope([YOUR SCOPES HERE]);
        return $client;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
}
...