Как обрабатывать токены обновления в golang/oauth2 client lib

Существует несколько примеров использования https://github.com/golang/oauth2, но ни один из них не охватывает использование токенов обновления. Я пробовал несколько подходов, но я до сих пор не удовлетворен результатами.

Есть ли какой-нибудь пример кода или, может быть, вы знаете какой-то проект в Github, используя oauth2 lib, чтобы взять в качестве примера?

Ответ 1

Вам не нужно беспокоиться об обновляющих токенах до тех пор, пока вы не сохраните параметр Expiry. Получив объект "Token", сохраните следующее в своей базе данных:

token.AccessToken, token.RefreshToken, token.TokenType и token.Expiry

при извлечении, снова создайте объект токена, используя указанные выше параметры:

token := new(oauth2.Token)
token.AccessToken = {{ From DataBase }}
token.RefreshToken = {{ From DataBase }}
token.Expiry = {{ From DataBase }}
token.TokenType = {{ From DataBase }}

а затем получите свой http-клиент:

config.Client(ctx, token)

это приведет к обновлению токена. Выдержка (дополнительная информация: Golang oauth2 client):

Клиент возвращает HTTP-клиент, используя предоставленный токен. Токен будет автоматически обновляться по мере необходимости.

Единственным недостатком является то, что обновленный токен доступа не возвращается. Но это работает! Google не имеет ограничений на то, сколько раз используется токен обновления.