2

我们有一个 google 公司帐户,并且已经在使用 Groups Provisioning API 来管理我们域中的组。我们现在需要通过“组设置 api”调整组设置。我们的 java 代码在我们的域中充当所有 Group Provisioning API 的特殊管理员用户,因为它管理组。

a)我正在阅读https://developers.google.com/google-apps/groups-settings/auth

b) “如果您的应用程序有某些不寻常的授权要求,......或域范围的授权 (2LO),那么您目前不能使用 OAuth 2.0 令牌。在这种情况下,您必须改用 OAuth 1.0 令牌和 API钥匙。”

c)我阅读:https ://developers.google.com/console/help/#generatingdevkeys并为此应用程序生成了一个新的服务器密钥

d) 现在呢?如何将它与 google-api-services-groupssettings API 的 v1-rev25-1.14.2-beta 版本和“google-api-client”版本 1.14.1-beta 一起使用?我在任何示例中看到的唯一选项(仅适用于 oauth 2.0 请注意)是使用此 GoogleCredential 对象,该对象仅以 oauth 2.0 为中心,根据上面的(a),我们不能使用。

e) 鉴于没有关于在此库中使用 API 密钥的示例或有用信息,我决定尝试使用通过 oauth 2.0 和我们的特殊服务帐户 clientEmail 和 privatekey 之一创建 Groupsettings 对象的示例来尝试使用它。在某些方面,我不确定为什么这不起作用,因为组不是“用户数据”,但似乎它们应该能够由我正在连接的这个管理员 api 帐户管理。

HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();

GoogleCredential credential = new GoogleCredential.Builder()
  .setTransport(httpTransport)
  .setJsonFactory(jsonFactory)
  .setServiceAccountId("ourspecial_client_email@from.api.console")
  .setServiceAccountScopes(GroupssettingsScopes.APPS_GROUPS_SETTINGS)
  .setServiceAccountUser("my.special.admin.user@ourdomain.com")
  .setServiceAccountPrivateKeyFromP12File(
      new java.io.File("/path/to/privatekey"))
  .build();

Groupssettings service = new Groupssettings.Builder(httpTransport, jsonFactory, null)
  .setApplicationName("my API Integration")
  .setHttpRequestInitializer(credential).build();

Groups groups= service.groups().get("someexistingtestgroup@mydomain.com").execute();

Groups group = new Groups();
group.setWhoCanJoin("ALL_IN_DOMAIN_CAN_JOIN");
service.groups().patch("someexistingtestgroup@mydomain.com", group).execute();

当上面的代码执行时,(patch()调用)我得到这个错误:(我也试过“update()”同样的结果。这条消息是什么意思??这与身份验证有关吗?还是这是一些无效的调用在更新/补丁中?

{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Permission denied: Cannot hide from Groups directory.",
"reason" : "invalid"
} ],

另附注:您的“帮助”页面显示Google 工程师监控并回答标签 google-groups-settings”。在这里发帖寻求帮助时,但是stackoverflow要求我们有XXXXX点才能使用它!太好了,所以没有人会看到这个。

4

1 回答 1

3
  • 我不建议使用两腿 OAuth 1.0 身份验证,因为它已被 Google 弃用。

  • 您可以将 OAuth 2.0 服务帐户与 Groups Settings API 一起使用。只需按照Drive SDK 域范围指南中的说明替换组设置即可。但是,这样做的理由很少,因为您的应用仍需要知道 Google Apps 超级管理员的地址才能模拟服务帐户才能访问 Groups Settings API。

  • 访问 Groups Settings API 的最佳方法可能是标准的 OAuth 2.0 身份验证。您可以授权为具有超级管理员访问权限但范围仅为组设置 API 的用户帐户。如果您为 OAuth 身份验证请求离线访问,只要您的令牌未被撤销并且用户帐户以超级管理员身份存在,您就可以执行组设置 API 调用。

  • 您收到的特定错误意味着在 Google Apps 域的控制面板设置中,在设置 -> Groups for Business -> 共享选项 -> 群组可见性下,未选中“群组所有者可以从群组目录中隐藏群组”。这可以防止任何组被隐藏。

于 2013-05-08T18:06:48.657 回答