如何获取脱机令牌和刷新令牌以及自动刷新对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)我看不到如何设置自动刷新功能。这些页面描述了方法:

  • Credential.Builder类
  • 类CredentialStoreRefreshListener

但是我看不到在何处添加刷新侦听器。与GoogleAuthorizationCodeFlow.Builder班级不同,Credential.Builder班级中没有这样的方法

编辑更多代码调试之后,(在onSuccess()方法中)凭据返回时,似乎已经有了一个RefreshListener设置…所以也许这是默认情况下的设置,而我唯一的问题是我没有得到refresh_token,尽管询问了为了它。

也许还需要在Google API控制台中查看设置?

回答:

您应该注意的一件事:仅当用户明确同意所请求的作用域时,才会返回刷新令牌(除了访问令牌之外)。基本上,显示批准页面时。所有后续流将仅返回访问令牌。

现在,为了测试您的应用程序并确保您第一次收到刷新令牌,您可以使用rovaling_prompt =

force参数(builder.setApprovalPrompt("force"))来确保流程中显示了批准页面,并获得了用户的明确同意。解决所有问题并确保正确保存刷新令牌后,可以删除该标志(默认为auto

开发人员指南的“

离线访问”部分也提供了更多信息。

以上是 如何获取脱机令牌和刷新令牌以及自动刷新对Google API的访问 的全部内容, 来源链接: utcz.com/qa/420503.html

回到顶部