微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的开发者指南中找到.

原文地址:https://www.jb51.cc/java/123332.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐