Как получить токен доступа без вмешательства пользователя для известной учетной записи с помощью API Google Youtube v3?

Мне нужно создать веб-приложение в php, которое позволяет пользователю AD легко добавлять ссылку на видео в плейлист нашей учетной записи компании. Проблема в том, что мы не хотим, чтобы сотрудники знали пароль этой учетной записи.

Недавно мы установили новый фильтр интернет-фильтрации, который перенаправляет весь трафик YouTube на Youtube for Education. Единственная проблема заключается в том, что если учитель хочет посетить видеоролик, который им нужен для образования, но он не находится на сайте edu, он будет заблокирован для студентов. Решение состоит в том, чтобы добавить это видео в наш плейлист для учетной записи edu, и видео затем будет магически работать для студентов.

Я прочитал в этом сообщении: Постоянный токен доступа с YouTube api? что вы можете обменять временный токен на постоянный, но этот метод устарел, и я не могу найти, где это допускает OAuth 2.0.

Любая помощь будет принята с благодарностью!

ОБНОВИТЬ:

Я прочитал в двух разных местах API Google, что учетная запись службы не использовалась для youtube. Но я решил попробовать все равно, так как он поддерживает аутентификацию OAuth. Он действует так, как будто выполняет запрос, но не возвращает никаких результатов.

// Make sure you keep your key.p12 file in a secure location, and isn't // readable by others. const KEY_FILE = '/secretlocation/youtubeAPIServiceKey.p12'; $client = new Google_Client(); // Set your cached access token. Remember to replace $_SESSION with a // real database or memcached. session_start(); if (isset($_SESSION['token'])) { $client->setAccessToken($_SESSION['token']); } // Load the key in PKCS 12 format (you need to download this from the // Google API Console when the service account was created. $key = file_get_contents(KEY_FILE); $client->setClientId(CLIENT_ID); $client->setAssertionCredentials(new Google_AssertionCredentials( SERVICE_ACCOUNT_NAME, array('https://www.googleapis.com/auth/youtube'), $key)); $youtube = new Google_YoutubeService($client); $playlistResponse = $youtube->playlists->listPlaylists('id', array("mine"=>true)); print_r($playlistResponse); $_SESSION['token'] = $client->getAccessToken(); 

Когда это делается в песочнице на веб-сайте google api, он возвращает 5 элементов. Здесь он возвращает только это:

 Array ( [kind] => youtube#playlistListResponse [etag] => "dYdUuZbCApIwJ-onuS7iKMSekuo/Db2Wkrhuywa2CiaiO8EVH7ZukZ8" [pageInfo] => Array ( [totalResults] => 0 [resultsPerPage] => 5 ) [items] => Array ( ) ) 

UPDATE AGAIN:

Я подтвердил то, что уже знал. Я получал Unauthorized error (401) при попытке добавить новый плейлист в свою учетную запись.

 This error is commonly seen if you try to use the OAuth 2.0 Service Account flow. YouTube does not support Service Accounts, and if you attempt to authenticate using a Service Account, you will get this error. 

https://developers.google.com/youtube/v3/docs/errors

В исходную точку.

Related of "Как получить токен доступа без вмешательства пользователя для известной учетной записи с помощью API Google Youtube v3?"

Для настольных приложений вам необходимо использовать oauth 2.0:

https://developers.google.com/accounts/docs/OAuth2InstalledApp

Из ссылки:

1: При регистрации приложения вы указываете, что приложение является установленным приложением. Это приводит к другому значению параметра redirect_uri.

2: Client_id и client_secret, полученные во время регистрации, встроены в исходный код вашего приложения. В этом контексте client_secret явно не рассматривается как секрет.

3: Код авторизации может быть возвращен вашему приложению в строке заголовка браузера или в порт http: // localhost в строке запроса.

Также проверьте: https://developers.google.com/accounts/docs/OAuth2WebServer

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