如何获取脱机令牌和刷新令牌以及自动刷新对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