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

Refresh token missing in Google Oauth response file

我正在使用 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);
  }
}

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

Google.Apis.Auth.OAuth2.Responses.TokenResponse-user

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

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

在向 Google 发送请求时添加 prompt=consent 参数,每次都会无误地提供刷新令牌。