Aer*_*rox 5 java google-app-engine oauth oauth-2.0 google-oauth
我想实现自动刷新方法以获得新的访问令牌,因为已经从第一个授权流中获取了刷新令牌.
我应该调用哪种方法或方法列表?我正在使用Java和OAuth 2.0进行Web应用程序.鉴于OAuth 2.0 WebApplication,我应该在此代码中添加什么才能使一切正常工作?
您在问题中提供的链接通过使用Google API Client Library for Java实现了Google OAuth 2.0授权.并且该库实现了刷新访问令牌的功能.
所以你需要的是在这个库中使用Class GoogleRefreshTokenRequest.
此类是特定于Google的OAuth 2.0请求实现,用于使用刷新访问令牌中指定的刷新令牌刷新访问令牌.
它的java doc也给出了一个示例用法:
static void refreshAccessToken() throws IOException {
try {
TokenResponse response =
new GoogleRefreshTokenRequest(new NetHttpTransport(), new JacksonFactory(),
"tGzv3JOkF0XG5Qx2TlKWIA", "s6BhdRkqt3", "7Fjfp0ZBr1KtDRbnfVdmIw").execute();
System.out.println("Access token: " + response.getAccessToken());
} catch (TokenResponseException e) {
if (e.getDetails() != null) {
System.err.println("Error: " + e.getDetails().getError());
if (e.getDetails().getErrorDescription() != null) {
System.err.println(e.getDetails().getErrorDescription());
}
if (e.getDetails().getErrorUri() != null) {
System.err.println(e.getDetails().getErrorUri());
}
} else {
System.err.println(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
}
这是您可以参考的另一种用法.
您可以在CredentialManager.java中添加以下代码,当您需要刷新令牌时,请调用此方法.
public Credential refreshAccessToken(String refreshToken, String clientId, String clientSecret) throws IOException {
try {
TokenResponse response =
new GoogleRefreshTokenRequest(new NetHttpTransport(), new JacksonFactory(),
refreshToken, clientId, clientSecret).execute();
System.out.println("Access token: " + response.getAccessToken());
return buildEmpty().setAccessToken(response.getAccessToken());
} catch (TokenResponseException e) {
if (e.getDetails() != null) {
System.err.println("Error: " + e.getDetails().getError());
if (e.getDetails().getErrorDescription() != null) {
System.err.println(e.getDetails().getErrorDescription());
}
if (e.getDetails().getErrorUri() != null) {
System.err.println(e.getDetails().getErrorUri());
}
} else {
System.err.println(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用DataStoreCredentialRefreshListener
使用GoogleCredential访问受保护的资源.过期的访问令牌将使用刷新令牌自动刷新(如果适用).确保使用DataStoreCredentialRefreshListener并使用GoogleCredential.Builder.addRefreshListener(CredentialRefreshListener)为凭证设置它.