gpt4 book ai didi

java - 使用 OAuth 2.0 Google App Engine 刷新访问 token

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:13 28 4
gpt4 key购买 nike

鉴于已从第一个授权流程中获取的刷新 token ,我想实现自动刷新方法以获取新的访问 token 。

我应该调用哪个方法或方法列表来做到这一点?我正在为 Web 应用程序使用 Java 和 OAuth 2.0。鉴于 OAuth 2.0 WebApplication ,我应该在此代码中添加什么以使一切正常工作?

最佳答案

您在问题中提供的链接通过使用 Google APIs Client Library for Java 实现了 Google OAuth 2.0 授权。 .和该库实现了刷新访问 token 的功能。

所以你需要的是使用 Class GoogleRefreshTokenRequest在这个库中。

This class is Google-specific implementation of the OAuth 2.0 request to refresh an access token using a refresh token as specified in Refreshing an Access Token.

并且它的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());
}
}

这是 another usage可以引用。

可以在CredentialManager.java中添加如下代码,当需要刷新token时,调用该方法。

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());
}
}

另一种方法是使用 DataStoreCredentialRefreshListener

Access protected resources using the GoogleCredential. Expired access tokens will automatically be refreshed using the refresh token (if applicable). Make sure to use DataStoreCredentialRefreshListener and set it for the credential using GoogleCredential.Builder.addRefreshListener(CredentialRefreshListener).

关于java - 使用 OAuth 2.0 Google App Engine 刷新访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24128234/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com