根据the official docs,要构建GoogleCredential 实例,您必须拥有一个有效的访问令牌,并且必须像这样进行:
TokenResponse tokenResponse = new TokenResponse();
tokenResponse.setAccessToken(accessToken);
Credential credential =
createCredentialWithAccessTokenOnly(tokenResponse);
地点:
public static GoogleCredential
createCredentialWithAccessTokenOnly(
TokenResponse tokenResponse)
{
return new GoogleCredential().
setFromTokenResponse(tokenResponse);
}
根据a tutorial already quoted on SO,所需的访问令牌可从您的OAuth2AuthenticationToken 实例获得,如下所示:
OAuth2AuthorizedClientService clientService;
OAuth2AuthenticationToken oauthToken;
OAuth2AuthorizedClient client =
clientService.loadAuthorizedClient(
oauthToken.getAuthorizedClientRegistrationId(),
oauthToken.getName());
String accessToken =
client.getAccessToken().getTokenValue();
另外,您可以follow this doc查看如何获取上述OAuth2AuthorizedClientService的实例。
附录
如果想脱离我上面提到的已弃用的GoogleCredential 类并改用GoogleCredentials 类,那么事情似乎更简单:
public static GoogleCredentials
createCredentialsWithAccessTokenOnly(
OAuth2AccessToken oauthAccessToken)
{
AccessToken accessToken = new AccessToken(
oauthAccessToken.getTokenValue(),
Date.from(oauthAccessToken.getExpiresAt()));
return GoogleCredentials.create(accessToken);
}
(不再需要使用TokenResponse)。
对于将作用域附加到 GoogleCredentials 类的问题,我认为这是不必要的。
请注意,任何给定的有效访问令牌本身(已经!)都附加了一组范围。该集合是在 OAuth 流程期间指定的。例如,您可以调用以下 URL(例如在浏览器中,或通过在命令行提示符处发出 wget 或 curl):
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ACCESS_TOKEN,
用具体的访问令牌替换ACCESS_TOKEN,以查看附加到相应令牌的范围。
通过这种 HTTPS GET 方法调用获得的 JSON 响应如下所示:
{
"issued_to": "...",
"audience": "...",
"scope": "...",
"expires_in": 3599,
"access_type": "offline"
}