Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用刷新令牌获取访问令牌?_Java_Access Token_Refresh Token_Google Contacts Api - Fatal编程技术网

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

如何在Java中使用刷新令牌获取访问令牌?,java,access-token,refresh-token,google-contacts-api,Java,Access Token,Refresh Token,Google Contacts Api,我目前正在Java中使用googlecontact-API实现Contact应用程序。我已完成授权步骤并获得访问令牌和刷新令牌 现在我有了CLIENT\u ID、CLIENT\u SECRET和REFRESH\u TOKEN。但访问令牌将在一小时内过期 有人能告诉我如何使用Java中的刷新令牌自动生成访问令牌吗?我用两种方法实现了这个场景。我不确定它们是不是最好的,但对我来说效果很好 在这两种情况下,您都必须存储刷新令牌以及用户的电子邮件id。然后您必须以下面的格式发出HTTP请求 POST /

我目前正在
Java
中使用
googlecontact-API
实现
Contact应用程序。我已完成授权步骤并获得访问令牌和刷新令牌

现在我有了
CLIENT\u ID、CLIENT\u SECRET和REFRESH\u TOKEN
。但访问令牌将在一小时内过期


有人能告诉我如何使用Java中的刷新令牌自动生成访问令牌吗?

我用两种方法实现了这个场景。我不确定它们是不是最好的,但对我来说效果很好

在这两种情况下,您都必须存储刷新令牌以及用户的电子邮件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
POST/oauth2/v4/token HTTP/1.1
主持人:www.googleapis.com
内容类型:application/x-www-form-urlencoded
客户识别码=****&
客户机密=****&
刷新令牌=****&
授予\类型=刷新\令牌
它将在

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

第一个

存储emailid、刷新令牌、访问令牌和当前时间+3600秒。在数据库中,您可以计划每5分钟检查一次过期时间,如果任何用户的当前时间将达到(5或10分钟之前)过期时间,则获取刷新令牌并更新该特定用户的值。在api调用期间,只需获取用户的访问令牌

第二个


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

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

以下是获取新访问令牌的代码:


有关更多信息,请阅读官方谷歌API指南:


感谢您的回复。但是我不能理解你的HTTP请求格式。您能否解释如何在HTTP请求中使用客户端id、客户端密码和刷新令牌来生成新的访问令牌。您必须使用以下请求主体
client\u id:,client\u secret:,refresh\u token:,grant\u type:refresh\u token
向url发出HTTP POST请求:线程“main”中出现异常java.io.IOException:服务器返回了URL:的HTTP响应代码:401。这是我的密码。告诉我哪里错了。
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;
}