【发布时间】:2017-11-05 13:28:35
【问题描述】:
按照https://developers.google.com/identity/sign-in/web/server-side-flow从JavaScript获取授权码,并将其传递给服务器端,我们确实得到了一个访问令牌(和一个ID令牌),但不是所需的刷新令牌。
周围有很多帖子,但还没有解决。
关于如何获取刷新令牌有什么建议吗?
谢谢!
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){...}
【问题讨论】:
-
看起来不像是重复的。实际上,寻找在这篇文章中完成的第一步:“我已经完成了授权步骤并获得了访问令牌和刷新令牌。”。这就是我们需要的:获取刷新令牌。其他人在该帖子的底部指出,他使用 $client->setAccessType("offline");) 在 PHP 中获得了它。问题是如何使用 Java API 获取初始刷新令牌?
标签: oauth-2.0 google-oauth gmail-api