Я создаю приложение с Xamarin.forms, которое загружает изображения в определенную папку определенного диска Google.Для этого я использую сервисную учетную запись.Вот код для авторизации учетной записи службы:
private async Task<bool> AuthenticateServiceAccountAsync()
{
var serviceAccount = await GetFirstResourceStringWithName(_ServiceAccountKey);
if(serviceAccount == null)
{
await Application.Current.MainPage.DisplayExceptionAlert(new Exception("Service account key not found. Unable to authenticate."));
return false;
}
string[] scopes = new string[] { DriveService.Scope.Drive };
try
{
GoogleCredential credential = GoogleCredential.FromJson(serviceAccount)
.CreateScoped(scopes);
_DriveService = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "MyAppName"
});
return true;
}
catch(Exception e)
{
await Application.Current.MainPage.DisplayExceptionAlert(
e,
"No se pudo inicializar la cuenta de servicio.");
return false;
}
}
Работает безупречно, но я не знаю, как проверить истечение срока действия, токены не видны ни в GoogleCredential
, ни в DriveService
типах.
Ну, это не совсем так, можно получить токен с GoogleCredential.UnderlyingCredential.GetAccessTokenForRequestAsync()
, но это только строка токена без информации о времени истечения, насколько я могу судить.Кажется бесполезным в этих обстоятельствах.
Должен ли я просто заполнить поле DateTime
и проверить, прошел ли час с момента аутентификации учетной записи службы *