java – 如何获取离线令牌并刷新令牌并自动刷新对Google API的访问

前端之家收集整理的这篇文章主要介绍了java – 如何获取离线令牌并刷新令牌并自动刷新对Google API的访问前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在开发一个使用OAuth2和Google客户端库(位于Appengine和GWT BTW)上访问Google API(从Calendar API开始)的应用程序.

我实现了我的OAuth2Call后退servlet,扩展了Google AbstractAppEngineAuthorizationCodeCallbackServlet.

我有工作,我可以访问,可以查看日历等,但有两个问题:

1)我没有获得刷新令牌,尽管显式请求离线访问:

public static GoogleAuthorizationCodeFlow newFlow( String scope ) throws IOException {
    GoogleAuthorizationCodeFlow.Builder builder = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT,JSON_FACTORY,getClientSecrets(),Collections.singleton( scope ) );

    builder.setCredentialStore( new AppEngineCredentialStore() ).setAccessType("offline");

    return builder.build();
}

2)我看不到如何设置自动刷新功能.
这些页面描述了这些方法

> Class Credential.Builder
> Class CredentialStoreRefreshListener

但是我看不到添加刷新监听器的位置.与Credential.Builder类不同,GoogleAuthorizationCodeFlow.Builder类中没有这样的方法

编辑
在调试代码之后,当证书回来(在onSuccess()方法中)似乎有一个RefreshListener设置已经…..所以也许这是默认情况下,我唯一的问题是我没有得到refresh_token,尽管要求它.

也可能需要在Google API控制台中查看设置?

解决方法

您应该注意的一件事是:仅当用户明确地为所请求的范围给出同意时,才会返回刷新令牌(除了访问令牌).基本上,当显示批准页面.所有后续流程将只返回访问令牌.

现在,为了测试您的应用程序并确保您第一次收到刷新令牌,您可以使用approval_prompt = force参数(builder.setApprovalPrompt(“force”))来确保批准页面显示在流程中您得到用户的明确同意.解决任何问题后,确保刷新令牌存储正确,您可以删除该标志(默认为自动)

更多信息也可在offline access section的开发者指南中找到.

猜你在找的Java相关文章