2013-08-14 3 views
2

Моя сессия заканчивается каждый час, и я не могу найти документацию о том, как обновить токен, когда я использую метод проверки учетных записей служб. Для установленных приложений я могу получить RefreshToken от state объектаУчетные записи службы учета в Google Диске

AuthorizationState state = new AuthorizationState(new[] 
{ 
    "https://www.googleapis.com/auth/drive", 
    "https://www.googleapis.com/auth/drive.file", 
    "https://www.googleapis.com/auth/drive.metadata.readonly", 
    "https://www.googleapis.com/auth/drive.readonly" 
}) 
{ 
    Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl) 
} 
state = client.ProcessUserAuthorization(GetAuthorizationCode(), state); 
Console.WriteLine(state.RefreshToken); 

, но как сделать это для учетных записей служб?

X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "mysecret", X509KeyStorageFlags.Exportable); 

var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) 
{ 
    ServiceAccountId = SERVICE_ACCOUNT_EMAIL, 
    Scope = DriveService.Scopes.Drive.GetStringValue(), 
    ServiceAccountUser = "[email protected]", 
}; 

var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); 
DriveService service = DriveService(auth); 

из исходных кодов Google SDK я обнаружил, что AssertionFlowClient.GetState функция выполняет следующие

IAuthorizationState state = new AuthorizationState(provider.Scope.Split(' ')); 

    if (provider.RefreshToken(state, null)) { 
     return state; 
    } else { 
     return null; 
    } 

Так выглядит, как он делает маркер обновления. Я добавил этот вызов функции к таймеру обновления токена, но это не помогает. Я по-прежнему получаю исключение Invalid credentials через час.

+0

Не могли бы вы немного подробнее разъяснить свои требования? Что я понимаю из выше, так это то, что у вас есть токен обновления, и все, что вам нужно, это новый токен доступа, верно? –

ответ

0

Учетные записи службы не используют токены обновления. Вам просто нужно запросить другой токен доступа, используя ту же самую процедуру, которую вы использовали в первый раз. См. Документацию Google о том, что делать when access tokens expire.

+0

Спасибо. Но как мне это сделать? Я использую SDK клиента Google, мне нужно удалить старый объект и создать для него новый объект «DriveService»? – axe

Смежные вопросы