java - 如何通过 OAUTH 使用 google 电子邮件审核 API(特别是 createMailMonitor)

标签 java google-admin-sdk

摘要:我需要帮助获取服务(开发人员控制台中的服务帐户)进行身份验证,以便能够创建邮件监视器(电子邮件审核 API)

我读过的最相关/官方页面是:

developers.google.com/admin-sdk/email-audit/auth

developers.google.com/identity/protocols/OAuth2 Developers.google.com/identity/protocols/OAuth2ServiceAccount

我已经阅读了几个示例,但它们要么是旧的(在 oauth 成为强制性之前),要么是用于客户端应用程序的(经过用户同意)。

下面的代码收到错误 401(需要授权),因为它缺少在这种情况下进行身份验证的代码。

HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
GoogleCredential credential = new GoogleCredential.Builder()
  .setTransport(httpTransport)
  .setJsonFactory(jsonFactory)
  .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
  .setServiceAccountScopes(Arrays.asList("https://apps-apis.google.com/a/feeds/compliance/audit/ https://www.googleapis.com/auth/userinfo.email"))
  .setServiceAccountUser(<account user>)
  .setServiceAccountPrivateKeyFromP12File(new java.io.File(<PKCS12_FILE_PATH>))
  .build();

MailMonitor monitor = new MailMonitor();

Calendar beginDate = Calendar.getInstance();
beginDate.set(2009, Calendar.JUNE, 15, 0, 0);
monitor.setBeginDate(beginDate.getTime());
Calendar endDate = Calendar.getInstance();
endDate.set(2009, Calendar.JUNE, 30, 23, 20);
monitor.setEndDate(endDate.getTime());
monitor.setIncomingEmailMonitorLevel("FULL_MESSAGE");
monitor.setOutgoingEmailMonitorLevel("HEADER_ONLY");
monitor.setDraftMonitorLevel("FULL_MESSAGE");
monitor.setChatMonitorLevel("FULL_MESSAGE");
monitor.setDestUserName(<user name>);

AuditService service_audit = new AuditService(<domain>, <app id>);

//WHAT CODE DO I INSERT HERE TO AUTHORIZE THIS SERVICE?
//I've tried : 
//service_audit.setOAuthCredentials(oauthParameters, new OAuthHmacSha1Signer());
//but it requires Consumer Secret, etc which are only relevant for web applications where there is no user consent

GenericEntry entry = service_audit.createMailMonitor(<user id to monitor>, monitor);

我见过使用方法生成器的其他 API 的示例,例如:

Reports service = new Reports.Builder(httpTransport, jsonFactory, null)
  .setHttpRequestInitializer(credential).build();

所以我也尝试了以下方法,但我得到了一个找不到符号:

AuditService service = new AuditService.Builder(httpTransport, jsonFactory, null)
  .setHttpRequestInitializer(credential).build();

我错过了什么?我可以得到一些关于如何离开这里的指示吗?

非常感谢!

最佳答案

找到了答案...也许其他人可以从中受益。

缺少的代码是

credential.refreshToken();
service.setOAuth2Credentials(credential);

关于java - 如何通过 OAUTH 使用 google 电子邮件审核 API(特别是 createMailMonitor),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31200277/

相关文章:

java - android应用程序无法使用HttpClient获取80端口的内容

javascript - 使用 nextpagetoken 在 Google Apps 脚本查询中提取超过 500 个结果

java - 无法将 google-api-services-admin-directory 组织转换为 JSONArray。因为缺少 customType 值

java - 管理 SDK 目录 api 返回成员类型等于 "CUSTOMER"

java - Eclipse - 将每个主要方法分配给一个单独的控制台

java - 如何突出显示 JTextArea 中的单个单词

java - Canvas 画不出流畅的线条

java - 谷歌移动视觉 : Poor FaceDetector performance without CameraSource

google-admin-sdk - 如何获取 Google Apps 帐户的 CustomerId(或其他主键)?

python - Google Apps Admin SDK 取消删除不起作用