Моя сессия заканчивается каждый час, и я не могу найти документацию о том, как обновить токен, когда я использую метод проверки учетных записей служб. Для установленных приложений я могу получить 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
через час.
Не могли бы вы немного подробнее разъяснить свои требования? Что я понимаю из выше, так это то, что у вас есть токен обновления, и все, что вам нужно, это новый токен доступа, верно? –