了解 Google OAuth2 刷新令牌
Posted
技术标签:
【中文标题】了解 Google OAuth2 刷新令牌【英文标题】:Understanding Google OAuth2 Refresh tokens 【发布时间】:2021-08-27 22:37:48 【问题描述】:我之前开发过一个 OAuth2 应用程序,其逻辑是在旧令牌过期后通过刷新令牌生成新的访问令牌。
现在使用 Google API,我没有遇到同样的事情。我同时收到了访问令牌和刷新令牌,在允许访问令牌过期后,我尝试使用刷新令牌
var myToken = new TokenResponse
RefreshToken = sRefreshToken
;
var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
ClientSecrets = new ClientSecrets
ClientId = clientId,
ClientSecret = clientSecret
), "user", myToken);
service = new CalendarService(new BaseClientService.Initializer()
HttpClientInitializer = credentials,
ApplicationName = "XYZ",
);
这样做之后,我似乎可以进行 API 调用。但是我尝试在这样做之后检索访问/刷新令牌:
ACCESS_TOKEN = credentials.Token.AccessToken;
REFRESH_TOKEN = credentials.Token.RefreshToken;
访问令牌和刷新令牌都与旧令牌相同。我以为刷新会完全生成一个新令牌?不是这样吗?
如果访问令牌在 30 分钟后过期,那么您只需要传入刷新令牌(但不会重新生成),那么刷新令牌的意义何在?
【问题讨论】:
【参考方案1】:我之前开发过一个 OAuth2 应用程序,其逻辑是在旧令牌过期后通过刷新令牌生成新的访问令牌。
这个想法也适用于 Google 访问/刷新令牌。但是,如果您使用的是 .NET 客户端库(正如您的代码 sn-p 建议的那样),您不必自己执行刷新。您可以继续使用 UserCredential
对象,它会每隔约 1 小时自动获取一个新的访问令牌。
【讨论】:
但是旧的刷新令牌是否会继续工作?我想存储更新后的值,以便稍后返回时可以根据需要保持刷新。 是的,刷新令牌仍然有效——Google 不会在您每次使用刷新令牌时都使其失效/轮换。以上是关于了解 Google OAuth2 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章
Spring 5,401 返回后带有 Google 刷新访问令牌的 OAuth2