加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:09:07 所属栏目:Java 来源:网络整理
导读:我正在开发一个使用OAuth2和Google客户端库(位于Appengine和GWT BTW)上访问Google API(从Calendar API开始)的应用程序. 我实现了我的OAuth2Call后退servlet,扩展了Google AbstractAppEngineAuthorizationCodeCallbackServlet. 我有工作,我可以访问,可以查看
我正在开发一个使用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的开发者指南中找到.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读