Как обновить учетную запись службы Google, срок действия которой истекает через 1 час?

Я использую API Google Диска (С#) с учетной записью службы, как указано в

https://developers.google.com/drive/delegation

Я могу работать с объектом DriveService, но через 1 час он выдает ошибку с исключением: «Удаленный сервер вернул ошибку: (401) Несанкционировано».

Я знаю, установив для параметра "access_type" значение "офлайн", мы могли бы решить эту проблему, но я не могу установить это свойство для объекта DriveService.
Кто-нибудь знает, как обновить этот объект службы Google Диска?

заранее спасибо


person Jeevan    schedule 15.05.2013    source источник


Ответы (2)


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

access_type :: Указывает, требуется ли вашему приложению доступ к API Google, когда пользователь отсутствует в браузере. Этот параметр по умолчанию находится в режиме онлайн. Если вашему приложению необходимо обновить токены доступа, когда пользователь отсутствует в браузере, используйте автономный режим. Это приведет к тому, что ваше приложение получит токен обновления при первом обмене кодом авторизации для пользователя.

Позже вы используете этот токен обновления для получения нового токена доступа после истечения срока действия текущего токена доступа. По сути, ваше приложение затем попадет в конечную точку обмена токенами (POST на https://accounts.google.com/o/oauth2/token) с токеном обновления и вашими учетными данными клиента. Затем Google выдаст вам пару (токен обновления + токен доступа).
См. эту ссылку для получения дополнительных разъяснений.

EDIT.
Я проверил документацию по сервисному аккаунту и нашел пример приложения C#, которое также извлекает и использует токены обновления. См. здесь.
Надеюсь, это поможет.

person divyanshm    schedule 15.05.2013
comment
Спасибо Дивьяншм.... Но я не использую аутентификацию Google OAuth2.0.. Я использую аутентификацию учетной записи службы Google для пользователей домена.... Я нашел что-то вроде этого..... provider.RefreshToken(auth. State);............. это обновит объект DriveService.... Но есть ли какое-либо автоматическое обновление в аутентификации учетной записи службы... например, access_type=offline? - person Jeevan; 16.05.2013
comment
Добавил еще немного информации, которую смог найти. Я надеюсь, это поможет вам. - person divyanshm; 16.05.2013
comment
Страница не найдена :\ - person cegprakash; 27.11.2016

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

Когда пользователь соглашается на автономный доступ (через веб-сервер или аналогичный поток OAuth), возвращается токен обновления, который можно в любое время обменять (вместе с секретом клиента) на токен доступа.

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

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

Как правило, замечая, что срок действия токена доступа истек, и о запросе нового позаботятся клиентские библиотеки Google, хотя я не знаком с версией С#. Если бы вы могли поделиться своим кодом, который создает объект DriveService, это было бы полезно.

person aeijdenberg    schedule 24.05.2013
comment
Спасибо, aeijdenberg.... Я использую код, размещенный @developers.google.com /drive/ нам нужно обновить объект аутентификации. Я использую provider.RefreshToken(((OAuth2Authenticator‹AssertionFlowClient›)OAuthenticator).State);.... до истечения срока его действия, и он работает для меня. Спасибо еще раз - person Jeevan; 28.05.2013