我正在尝试使用 oauth API 通过 Java API 对 google 服务帐户进行身份验证。我希望用它来访问 Google Bigquery。我的 API 请求返回了“无效授权”。
这是代码,它是基本身份验证示例的副本(不是用于 Bigquery .. 而是另一个 Google API):
/** Global instance of the HTTP transport. */
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
private static Bigquery bigquery;
public ServiceAccountExample() {
try {
try {
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(BigqueryScopes.BIGQUERY)
.setServiceAccountPrivateKeyFromP12File(new File("GoogleBigQuery-privatekey.p12"))
//.setRefreshListeners(refreshListeners)
//.setServiceAccountUser("email.com")
.build();
credential.refreshToken();
bigquery = new Bigquery.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
//.setApplicationName("GoogleBigQuery/1.0")
.build();
listDatasets(bigquery, "publicdata");
return;
} catch (IOException e) {
System.err.println(e.getMessage());
}
} catch (Throwable t) {
t.printStackTrace();
}
}
SERVICE_ACCOUNT_EMAIL 是表单的电子邮件地址:XXXXXXX@developer.gserviceaccount.com
如果我删除 credential.refreshToken() 行,它会在第一次调用 Bigquery 时在 listsDatasets 中失败...否则它会在 credential.refreshToken().. 上失败,并出现相同的错误。
BigQuery 不接受服务帐号身份验证吗?
我相信我已经通过 API 控制台正确地完成了所有工作。我有:
- 开启对 Big Query API 的访问。
- 在“API 访问”选项卡下创建了一个服务帐户。
- 下载了我的私钥(从上面的代码中引用)。
- 鉴于我的服务帐户用户在“团队”选项卡下“可以编辑”访问权限。
- 启用计费。
我错过了什么吗?还有什么我需要做的吗?
谢谢..