用户同意画面出现后访问令牌过期

问题描述 投票:0回答:1

我想谷歌日历API基于关春引导我的谷歌应用程序引擎项目的一个集成。使用基于JAVA谷歌 - 客户端API库进行授权。我提供了我的应用程序引擎项目的GoogleAuthorizationCodeFlow建立的客户ID和密码。在我第一次运行,我得到了用户同意的屏幕,并在受理后,StoredCredential文件中的目标/令牌创建。在此之后,我所有的谷歌日历API调用工作正常。一段时间后,我的猜测是有关访问令牌到期,我又得到用户同意的屏幕。按照文件,如果接入类型设置为offline,授权流程将采取管理刷新令牌的照顾。 StoredCredential文件仍然存在目标/令牌路径,但我仍然看到用户同意画面。授权码的粘贴片段。

  private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
    // Load client secrets.
    InputStream in = EventController.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
        .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
        .setAccessType("offline")
        .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
    return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
  }

  public static Calendar get() throws GeneralSecurityException, IOException {
    // Build a new authorized API client com.huddle.processor.service.
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    return new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
        .setApplicationName(APPLICATION_NAME)
        .build();
  } 

更新:虽然远程调试,当谷歌,OAuth的客户端从文件中使用的读取存储的凭据

StoredCredential stored = credentialDataStore.get(userId);

刷新令牌为空。想知道如果这是原因,但不知道为什么它没有得到设置。

将是巨大的,如果有人可以让我知道我失去了什么。谢谢

google-app-engine google-calendar-api google-api-java-client
1个回答
1
投票

找到了解决此。它涉及到不能够得到刷新令牌。需要通过approval_prompt =力参数。所以更新程式码是

GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
        .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
        .setAccessType("offline")
        .setApprovalPrompt("force")
        .build();

参考博客这让我:https://googlecode.blogspot.com/2011/10/upcoming-changes-to-oauth-20-endpoint.html

© www.soinside.com 2019 - 2024. All rights reserved.