Oauth 2.0 正在获取Gmail API访问和ID令牌,但刷新令牌为空
在从JavaScript获取授权代码并将其传递到服务器端之后,我们确实获得了一个访问令牌(和一个ID令牌),但不是所需的刷新令牌 周围有很多帖子,但还不能解决 有没有关于如何获取刷新令牌的建议 谢谢Oauth 2.0 正在获取Gmail API访问和ID令牌,但刷新令牌为空,oauth-2.0,google-oauth,gmail-api,Oauth 2.0,Google Oauth,Gmail Api,在从JavaScript获取授权代码并将其传递到服务器端之后,我们确实获得了一个访问令牌(和一个ID令牌),但不是所需的刷新令牌 周围有很多帖子,但还不能解决 有没有关于如何获取刷新令牌的建议 谢谢 private String getResponseToken(GoogleClientSecrets clientSecrets, String authCode) throws IOExce
private String getResponseToken(GoogleClientSecrets clientSecrets,
String authCode) throws IOException {
try {
GoogleTokenResponse tokenResponse =
new GoogleAuthorizationCodeTokenRequest(
new NetHttpTransport(),
JacksonFactory.getDefaultInstance(),
"https://www.googleapis.com/oauth2/v4/token",
// "https://accounts.google.com/o/oauth2/token",
clientSecrets.getDetails().getClientId(),
clientSecrets.getDetails().getClientSecret(),
authCode, //NOTE: was received from JavaScript client
"postmessage" //TODO: what's this?
).execute();
String accessToken = tokenResponse.getAccessToken();
String idToken = tokenResponse.getIdToken();
//TODO: not getting a refresh token... why?!
String refreshToken = tokenResponse.getRefreshToken();
Boolean hasRefreshToken = new Boolean(!(refreshToken == null));
LOGGER.warn("received refresh token: {}", hasRefreshToken);
LOGGER.debug("accessToken: {}, refreshToken: {}, idToken: {}", accessToken, refreshToken, idToken);
return accessToken;
}catch (TokenResponseException tre){...}
Gmail API仅在您第一次请求用户权限时提供刷新令牌。(至少在我身上是这样的)
转到:,删除应用程序的授权并运行代码。您应该会收到刷新令牌。Gmail API仅在您第一次请求用户权限时提供刷新令牌。(至少在我身上是这样的) 转到:,删除应用程序的授权并运行代码。您应该收到刷新令牌。您应该添加
new GoogleAuthorizationCodeRequestUrl(...).setAccessType("offline")
或其他语法:
var authReq = new GoogleAuthorizationCodeRequestUrl(new Uri(GoogleAuthConsts.AuthorizationUrl)) {
RedirectUri = Callback,
ClientId = ClientId,
AccessType = "offline",
Scope = string.Join(" ", new[] { Scopes... }),
ApprovalPrompt = "force"
};
在Fiddler中,您应该看到以下请求:
访问类型=离线
另见
有关setAccessType的更多详细信息,请参见您应该添加
new GoogleAuthorizationCodeRequestUrl(...).setAccessType("offline")
或其他语法:
var authReq = new GoogleAuthorizationCodeRequestUrl(new Uri(GoogleAuthConsts.AuthorizationUrl)) {
RedirectUri = Callback,
ClientId = ClientId,
AccessType = "offline",
Scope = string.Join(" ", new[] { Scopes... }),
ApprovalPrompt = "force"
};
在Fiddler中,您应该看到以下请求:
访问类型=离线
另见
有关setAccessType的更多详细信息,请参见在找到如何在后端使用Google API后(文档有点不完整…),通过调整参数在前端解决了该问题: 格兰特弗林塞斯酒店({ -提示:“选择帐户” +提示:“同意”
HTH在找到如何在后端使用Google API(文档有点不完整)后,通过调整参数在前端解决了这个问题: 格兰特弗林塞斯酒店({ -提示:“选择帐户” +提示:“同意”
HTH的可能重复项看起来不像重复项。实际上,在这篇文章中寻找完成的第一步:“我已经完成了授权步骤,并获得了访问令牌和刷新令牌。”。这就是我们需要的:获取刷新令牌。其他人在文章底部注意到,他是在PHP中使用$client->setAccessType(“offline”);)获取的。问题是如何使用Java API获取初始刷新令牌?的可能重复项看起来不像重复项。实际上,在本文中查找完成的第一步:“我已经完成了授权步骤,并获得了访问令牌和刷新令牌。”。这就是我们需要的:获取刷新令牌。其他人在帖子底部指出,他是用PHP通过$client->setAccessType(“offline”);获得的。)。问题是如何使用Java API获取初始刷新令牌?Hi Ricardo,谢谢,但似乎无法解决问题。删除应用程序授权将使权限提示再次显示给用户,但结果(未获取刷新令牌)保持不变。Hi Ricardo,谢谢,但似乎无法解决问题。删除应用程序授权将再次向用户显示权限提示,但结果(未获得刷新令牌)保持不变。将访问类型设置为脱机工作,但我必须按照Ricardo Gómez所说的操作,也必须按照Ricardo Gómez所说的操作