【问题标题】:Getting access token as Null in Google service account在 Google 服务帐户中获取访问令牌为 Null
【发布时间】:2016-06-17 16:43:56
【问题描述】:

我正在使用 Google 服务帐户使用以下代码从服务端获取访问令牌。但我将访问令牌设为 Null。相同的返回令牌将用于在客户端为相同的 userEmailId 打开 Google 文件选择器。请提出我在代码中做错了什么。

private static final List SCOPE = Arrays.asList("https://www.googleapis.com/auth/drive");

public String getAccessToken(String SERVICE_ACCOUNT_EMAIL, String SERVICE_ACCOUNT_PKCS12_FILE_PATH,String userEmailId){
                try {
                    HttpTransport httpTransport = new NetHttpTransport();
                    JsonFactory jsonFactory = new JacksonFactory();
                    GoogleCredential credential = new GoogleCredential.Builder()
                                                    .setTransport(httpTransport)
                                                    .setJsonFactory(jsonFactory)
                                                    .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                                                    .setServiceAccountScopes(SCOPE)
                                                    .setServiceAccountUser(userEmailId)
                                                    .setServiceAccountPrivateKeyFromP12File(new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
                                                    .build();

                    credential.getRefreshToken();
                    return credential.getAccessToken();
                } catch (Exception e) {
                    // TODO: handle exception
                    log.severe("Error while getting Drive  credentilas. 5.0"+ e.getMessage());
                    return null;
                }
            }

【问题讨论】:

标签: java google-app-engine google-api google-oauth


【解决方案1】:

对于那些使用 Firebase Admin SDK(因此使用 GoogleCredentials 类)的用户,可以这样做。

GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount).createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.messaging"));
credentials.refresh();
credentials.getAccessToken();

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。答案似乎是简单地从 credential.getRefreshToken() 简单地 credential.refreshToken()

    应该可以解决问题

    【讨论】:

      猜你喜欢
      • 2015-04-29
      • 2015-02-11
      • 2017-10-07
      • 2016-04-29
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      相关资源
      最近更新 更多