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 参数,每次都会无误地提供刷新令牌。
我正在使用 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 参数,每次都会无误地提供刷新令牌。