如何使用Java中的刷新令牌获取访问令牌?

问题描述 投票:1回答:2

我目前正在使用Contact Application中的Google Contact API实现Java。我已完成授权步骤,并获得了访问令牌刷新令牌

现在我有了CLIENT_ID , CLIENT_SECRET AND REFRESH_TOKEN。但是访问令牌在一个小时内即将过期。

有人可以说出如何使用Java中的刷新令牌自动生成访问令牌吗?

java access-token refresh-token google-contacts-api
2个回答
2
投票

您可以使用Google OAuth2客户端库使用刷新令牌获取新的访问令牌

这是我的获取新访问令牌的代码:

public TokenResponse refreshAccessToken(String refreshToken) throws IOException {
    TokenResponse response = new GoogleRefreshTokenRequest(
            new NetHttpTransport(),
            new JacksonFactory(),
            refreshToken, 
            "your clientId",
            "your clientSecret")
            .execute();
    System.out.println("Access token: " + response.getAccessToken());

    return response;
}

有关更多信息,请参阅Google API官方指南:


0
投票

我已经以两种方式实现了此方案。不知道它们是否是最好的,但对我来说效果很好。

在两种情况下,您都必须存储用户的刷新令牌电子邮件ID。然后,您必须以以下格式发出HTTP请求。

POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=**<your_client_id>**&
client_secret=**<your_client_secret>**&
refresh_token=**<refresh_token>**&
grant_type=refresh_token

它将返回access_tokenexpires_inSource

现在的问题是如何以及何时执行http请求。因此,我有两种方法。

第一个

存储电子邮件ID,刷新令牌,访问令牌和当前时间+3600秒。在您的数据库中,您可以安排每5分钟检查一次到期时间,如果任何用户的当前时间都将达到(在5或10分钟之前)到期时间,请获取刷新令牌并更新该特定用户的值。在api调用期间,只需获取用户的访问令牌即可。

第二个

[当用户登录您的网站时,获取访问令牌和当前时间+ 3600秒,并将其存储在浏览器Cookie中。现在,在执行任何api调用之前,只需检查当前时间(完成api调用的时间)是否小于过期时间(存储在cookie中)。如果为true,则可以使用以前的访问令牌,否则获取一个新的令牌,然后再次更新cookie。此外,您还必须提出另一个条件,即如果根本不存在Cookie,那么还必须获得新的刷新令牌。

© www.soinside.com 2019 - 2024. All rights reserved.