Google Oauth 响应文件中缺少刷新令牌

Posted

技术标签:

【中文标题】Google Oauth 响应文件中缺少刷新令牌【英文标题】:Refresh token missing in Google Oauth response file 【发布时间】:2021-08-20 09:26:29 【问题描述】:

我正在使用 Google 的 OAuth .Net 库在 ASP.Net MVC 应用程序中实现 Google OAuth。下面是我的代码。

IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
  new GoogleAuthorizationCodeFlow.Initializer 
    ClientSecrets = new ClientSecrets 
        ** ClientId ** , ** ClientSecret **
      ,
      DataStore = new FileDataStore( ** responsepath ** , true),
      Scopes = new [] 
        "https://www.googleapis.com/auth/userinfo.email",
        "https://www.googleapis.com/auth/gmail.send"
      ,
      Prompt = "select_account"
  );

var userId = "user";
var uri = Request.Url.ToString();
var code = Request["code"];
if (code != null) 
  var token = flow.ExchangeCodeForTokenAsync(userId, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;
  var oauthState = AuthWebUtility.ExtracRedirectFromState(flow.DataStore, userId, Request["state"]).Result;
  Response.Redirect(oauthState);
 else 
  var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(userId, CancellationToken.None).Result;

  if (result.RedirectUri != null) 
    Response.Redirect(result.RedirectUri);
  

当用户点击谷歌登录按钮时,我的页面被重定向到谷歌认证页面。认证成功后,再次显示我的页面。当我检查 responsepath 时,会创建以下文件,其中包含访问令牌、到期时间等。

Google.Apis.Auth.OAuth2.Responses.TokenResponse-用户

当我在我的 Visual Studio 调试环境(IIS Express)中本地运行上述代码时,上述响应文件中包含“refresh_token”。当在生产环境(IIS)中部署相同的代码时,缺少“refresh_token”是响应文件。我想知道它背后的原因,因为我需要刷新令牌进行进一步处理。

注意:在这两种情况下,我在尝试之前都从我的 Google 帐户撤消了应用程序的访问权限。所以,这不是关于“refresh_token”只会第一次发送。

【问题讨论】:

您可能想尝试遵循文档developers.google.com/api-client-library/dotnet/guide/… 【参考方案1】:

在向 Google 发送请求时添加 prompt=consent 参数每次都不会失败。

【讨论】:

以上是关于Google Oauth 响应文件中缺少刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

即使访问令牌有效,也无法使用刷新令牌刷新 Google OAuth2 的访问令牌

具有公共访问权限的 Web 应用程序的 Google OAuth 2.0 刷新令牌

在 Google Contacts API 3.0 版上使用 oauth2 检索刷新令牌

如何刷新存储的 Google oAuth 凭据

如何从 passportjs 中的刷新令牌中获取新的 Google oauth 访问令牌

使用 OAuth 2.0 Google App Engine 刷新访问令牌