Позвольте'ы сказать, что у меня есть веб-приложение, которое должен получить доступ к диска с файлами в фоновом режиме. Это будут либо собственные файлы, это доступа, или быть запущен в аккаунт Google с помощью которого владелец предоставил документы.
Я понимаю, что мое приложение должно маркер обновления, но я не'т хотите, чтобы написать код, чтобы получить, что поскольку я'будете только когда-нибудь сделать это один раз.
НБ. Это не с помощью учетной записи службы. Приложение будет работать под обычной учетной записью Google. Учетная запись службы является эффективным подходом в некоторых ситуациях. Однако методика с помощью OAuth площадка для имитации приложение может сэкономить кучу лишних действий, и относится к любой API, для которых совместное использование учетной записи службы не поддерживается.
Это можно сделать с что OAuth2 площадка в https://developers.google.com/oauthplayground
Шаги:-
веб-приложений
Ваше приложение теперь может работать без присмотра, и использовать маркер обновления, как описано https://developers.google.com/accounts/docs/OAuth2WebServer#offline чтобы получить маркер доступа.
НБ. Следует помнить, что маркер обновления может быть просрочен Google, который будет означать, что вы должны повторить шаги 5 года, чтобы получить новый маркер обновления. Симптом это будет неверный Грант возвращается, когда вы пытаетесь использовать маркер обновления.
Nb2 успешно. Этот метод хорошо работает, если вы хотите, чтобы веб-приложение, которое открыть свой собственный (и *только *** свой собственный) счет, не удосужившись написать код авторизации, который будет только запустить один раз. Просто пропустите шаг 1, и заменить "Мой.диск.приложение" с вашим собственным адресом электронной почты на шаге 6. убедитесь, что вы осознаете последствия для безопасности, если обновить токен украдут.
Смотрите Вуди'ы комментарий ниже, где ссылки на это Google Видео
. . .
Вот небольшой код JavaScript процедура, которая показывает, как использовать маркер обновления с помощью OAuth площадка перечислить некоторые файлы диска. Вы можете просто скопировать и вставить его в консоль разработчика 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();
Позвольте мне добавить альтернативный маршрут к pinoyyid'с выбором ответа (который не't работа для меня - появляются ошибки редирект).
Вместо использования OAuthPlayground вы также можете использовать API-интерфейс HTTP с остальными напрямую. Таким образом, разница в pinoyyid'ы ответ заключается в том, что мы'будете делать все локально. Выполните шаги 1-3 из pinoyyid'ы ответ. Я'МР процитировать их:
Теперь, вместо детской площадки, добавьте следующее в ваш учетные данные:
Уставный JavaScript источники: http://localhost (я не'т знать, если это необходимо, но просто сделай это.) Авторизованные URI переадресации: http://localhost:8080
Скриншот (на немецком языке):
Убедитесь в том, чтобы сохранить изменения через синюю кнопку ниже!
Теперь вы'будете, вероятно, хотеть использовать GUI, чтобы построить свой HTTP-запросов. Я использовал бессонница но вы можете пойти с почтальон или простой завиток. Я рекомендую бессонница это позволяет легко пройти через согласие экранов.
Построить новый Вам запрос со следующими параметрами:
URL: https://accounts.google.com/o/oauth2/v2/auth
Query Param: redirect_uri=http://localhost:8080
Query Param: prompt=consent
Query Param: response_type=code
Query Param: client_id=<your client id from OAuth credentials>
Query Param: scope=<your chosen scopes, e.g. https://www.googleapis.com/auth/drive.file>
Query Param: access_type=offline
Если ваш инструмент выбора не'т справиться с кодирование url автоматически убедитесь, чтобы получить это право себе.
Прежде чем вы запустите ваш запрос создать сервер на прослушивание http://localhost:8080
. Если у вас есть узел и НПМ установки запустить НПМ я выражаю
, затем создать index.js
:
``Яш экспресс var = требуют('Экспресс'); ВАР App = экспресс();
приложение.вам('/', функция (req, разрешением) { РЭС.отправить('ОК'); консоль.журнал(Треб) });
приложение.слушать(8080, функция () { консоль.журнал('прослушивает порт 8080!'); }); ``
И запустить сервер через узел index.js. Рекомендую либо не регистрировать объект весь запрос или выполнить узел index.js | менее полная отдача будет огромная. Есть очень простые решения для других языков тоже. Е. Г. использовать PHP'ы встроенный веб-сервер на 8080
в PHP -ы на localhost:8080`.
Теперь огонь вашему запросу (при бессоннице) и должен появиться запрос с логином:
Войти с вашей электронной почты и пароль и подтверждения согласия (должен содержать выбранной области).
Вернитесь к терминалу и проверить выходной. Если вы авторизованы все это прокрутите вниз (например, pgdown меньше), пока не увидите строку с кодом=4/...`.
Скопируйте этот код, это код авторизации, который вы'll хочу обмен на доступа и маркер обновления. Дон'т слишком много копировать - если там'ы амперсанд &
не скопировать его или что-нибудь после. &
определяет параметры запроса. Мы просто хотим код
.
Теперь создать HTTP-запрос POST, указывая https://www.googleapis.com/oauth2/v4/token в качестве *URL-адреса, закодированные в форме*. При бессоннице вы можете просто нажать, что - в другие инструменты, которые вы, возможно, придется задать заголовок себя
тип контента: приложение/х-www-формы-urlencoded`.
Добавьте следующие параметры:
code=<the authorization code from the last step>
client_id=<your client ID again>
client_secret=<your client secret from the OAuth credentials>
redirect_uri=http://localhost:8080
grant_type=authorization_code
Опять же, убедитесь, что кодировка правильная.
Огонь ваш запрос и проверяем выход с сервера. В ответ вы должны увидеть объект JSON:
в JSON { на "способом" и: "по ХХХХ" и, на "expires_in и": 3600, на "Маркер обновления и": "по-1/ХХХХ" и, на "сферы" и: "и https://www.googleapis.com/auth/drive.file", на "token_type-то": на "носителем"и }
Вы можете использовать этот маркер доступа сразу, но это'МР действует только в течение одного часа. Обратите внимание на маркер обновления. Это тот, который вы всегда можете* обмен на новый маркер доступа.
*
Вам придется повторить процедуру, если пользователь изменяет свой пароль, отменяет доступ, неактивен в течение 6 месяцев и т. д.
Счастливая OAuthing!