Ответ 1
Это можно сделать с помощью Oauth2 Playground по адресу https://developers.google.com/oauthplayground.
Шаги: -
- Создайте учетную запись Google (например, [email protected]). Или пропустите этот шаг, если вы используете существующую учетную запись.
- Используйте консоль API для регистрации mydriveapp (https://console.developers.google.com/apis/credentials/oauthclient?project=mydriveapp или просто https://console.developers.google.com/apis/).
- Создайте новый набор учетных данных (NB
OAuth Client ID
неService Account Key
а затем выберите "Веб-приложение" из списка) - Добавьте https://developers.google.com/oauthplayground в качестве действительного URI перенаправления.
- Запишите идентификатор клиента (веб-приложение) и Client Secret
- Войдите как [email protected]
- Перейти на площадку Oauth2
- В настройках (значок шестеренки) установите
- Oauth flow: сервер
- Тип доступа: автономный
- Используйте свои собственные учетные данные OAuth: TICK
- Идентификатор клиента и секрет клиента: с шага 5
- Нажмите Шаг 1 и выберите Drive API https://www.googleapis.com/auth/drive (сказав, что этот метод также работает для любого из перечисленных API Google)
- Нажмите Авторизовать API. Вам будет предложено выбрать свой аккаунт Google и подтвердить доступ
- Нажмите Шаг 2 и "Код авторизации Exchange для токенов"
- Скопируйте возвращенный токен обновления и вставьте его в свое приложение, исходный код или в какое-либо хранилище, откуда ваше приложение сможет его получить.
Ваше приложение теперь может запускаться без присмотра и использовать токен обновления, как описано https://developers.google.com/accounts/docs/OAuth2WebServer#offline, чтобы получить токен доступа.
NB. Имейте в виду, что срок действия маркера обновления может истечь, что означает, что вам нужно повторить шаги 5 и далее, чтобы получить новый токен обновления. Симптомом этого будет возвращение недействительного гранта при попытке использовать токен обновления.
NB2. Этот метод работает хорошо, если вам нужно веб-приложение, которое имеет доступ к вашей (и только к вашей) учетной записи Drive, не беспокоясь о том, чтобы написать код авторизации, который будет запускаться только один раз. Просто пропустите шаг 1 и замените "my.drive.app" своим собственным адресом электронной почты на шаге 6. Убедитесь, что вы знаете о последствиях безопасности, если маркер обновления будет украден.
См. Ниже комментарий Вуди, где он ссылается на это видео Google https://www.youtube.com/watch?v=hfWe1gPCnzc
, ,
Вот небольшая процедура JavaScript, которая показывает, как использовать токен обновления из OAuth Playground, чтобы получить список некоторых файлов Drive. Вы можете просто скопировать и вставить его в консоль разработчика Chrome или запустить его с помощью узла. Конечно, предоставьте свои собственные учетные данные (ниже приведены все поддельные).
function get_access_token_using_saved_refresh_token() {
// from the oauth playground
const refresh_token = "1/0PvMAoF9GaJFqbNsLZQg-f9NXEljQclmRP4Gwfdo_0";
// from the API console
const client_id = "559798723558-amtjh114mvtpiqis80lkl3kdo4gfm5k.apps.googleusercontent.com";
// from the API console
const client_secret = "WnGC6KJ91H40mg6H9r1eF9L";
// from https://developers.google.com/identity/protocols/OAuth2WebServer#offline
const refresh_url = "https://www.googleapis.com/oauth2/v4/token";
const post_body = 'grant_type=refresh_token&client_id=${encodeURIComponent(client_id)}&client_secret=${encodeURIComponent(client_secret)}&refresh_token=${encodeURIComponent(refresh_token)}';
let refresh_request = {
body: post_body,
method: "POST",
headers: new Headers({
'Content-Type': 'application/x-www-form-urlencoded'
})
}
// post to the refresh endpoint, parse the json response and use the access token to call files.list
fetch(refresh_url, refresh_request).then( response => {
return(response.json());
}).then( response_json => {
console.log(response_json);
files_list(response_json.access_token);
});
}
// a quick and dirty function to list some Drive files using the newly acquired access token
function files_list (access_token) {
const drive_url = "https://www.googleapis.com/drive/v3/files";
let drive_request = {
method: "GET",
headers: new Headers({
Authorization: "Bearer "+access_token
})
}
fetch(drive_url, drive_request).then( response => {
return(response.json());
}).then( list => {
console.log("Found a file called "+list.files[0].name);
});
}
get_access_token_using_saved_refresh_token();