了解 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 Google OAuth2

Spring 5,401 返回后带有 Google 刷新访问令牌的 OAuth2

google oauth2 刷新令牌何时过期?

Google API OAuth2 刷新令牌突然被撤销

如何使用 oauth2 并通过 google api 刷新令牌?

OAuth 2.0 刷新令牌是不是完全过期?