And*_*zie 14 java google-app-engine google-api oauth-2.0
我正在开发一个应用程序,使用OAuth2和谷歌客户端库(在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();
}
Run Code Online (Sandbox Code Playgroud)
2)我看不到如何设置自动刷新功能.这些页面描述了这些方法:
但是我看不到在哪里添加刷新监听器.与GoogleAuthorizationCodeFlow.Builder课程不同,Credential.Builder课堂上没有这样的方法
编辑在更多地调试代码之后,当凭证返回时(在onSuccess()方法中)它似乎已经有一个RefreshListener集合.....所以也许这是他们的默认情况,而我唯一的问题是我没有得到refresh_token,尽管问为了它.
可能还需要在Google API控制台中查看设置吗?
小智 6
要获取刷新令牌,您必须同时设置accessType ="offline"和approvalPrompt ="force".
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT,
JSON_FACTORY, CLIENT_ID, CLIENT_SECRET, SCOPE).setAccessType("offline").setApprovalPrompt("force").build();
Run Code Online (Sandbox Code Playgroud)