Обновить токен для Google Storage Client - PullRequest
2 голосов
/ 07 марта 2019

Я должен быть глупым, я думаю. Использование OAuth.

иметь следующий кусок кода

// Authenticate with Google            
        using (MemoryStream stream =
            new MemoryStream(GetSecrets()))
        {
            string credPath = "token.json";
            this.userCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
            Console.WriteLine("Credential file saved to: " + credPath);
        }

Работает нормально и устанавливает this.userCredential как ожидалось

Теперь я хочу создать StorageClient

Но StorageClient нельзя создать напрямую из UserCredential.

Единственный способ, которым я могу видеть, - это создать из AccessToken

GoogleCredential googleCredential = GoogleCredential.FromAccessToken(this.userCredential.Token.AccessToken);                                        
        return StorageClient.Create(googleCredential);

Проблема в том, что этот токен истекает через час.

Однако в C # я не могу на всю жизнь найти способ передать токен обновления (который есть в UserCredential) и заставить его обновляться по мере необходимости

В Java это представляется возможным, используя .Builder

Кто-нибудь знает, возможно ли это?

1 Ответ

3 голосов
/ 07 марта 2019

Самый простой способ добиться этого - создать StorageService самостоятельно, а затем передать его конструктору StorageClientImpl:

var service = new StorageService(new BaseClientService.Initializer
{
    HttpClientInitializer = userCredential,
    ApplicationName = StorageClientImpl.ApplicationName,
});

StorageClient client = new StorageClientImpl(service);

Мы могли бы рассмотреть возможность добавления перегрузки Create, которая в будущем принимает IConfigurableHttpClientInitializer вместо GoogleCredential.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...