Google api google groups settings API的域范围授权验证?

Google api google groups settings API的域范围授权验证?,google-api,google-groups-api,google-groups-settings,Google Api,Google Groups Api,Google Groups Settings,我们有一个google公司帐户,并且已经在使用Groups Provisioning API来管理我们域中的组。我们现在需要通过“组设置api”调整组设置。我们的java代码在我们的域中充当管理组的所有组资源调配API的特殊管理员用户 a) 我在读书 b) 如果您的应用程序有某些不寻常的授权要求,……或域范围的授权(2LO),则您当前不能使用OAuth 2.0令牌。在这种情况下,您必须改用OAuth 1.0令牌和API密钥 c) 我读到:并为此应用程序生成了一个新的服务器密钥 d) 现在怎么办?

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

a) 我在读书

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

c) 我读到:并为此应用程序生成了一个新的服务器密钥

d) 现在怎么办?如何将其用于v1-rev25-1.14.2-beta版的google api服务组设置api和“google api客户端”1.14.1-beta版?我在任何示例中看到的唯一选项(请注意,仅适用于oauth 2.0)是使用这个仅以oauth 2.0为中心的GoogleCredential对象,根据上面的(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()”相同的结果。这个消息是什么意思?这与auth有关吗?或者这是更新/补丁中的某个无效调用

{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Permission denied: Cannot hide from Groups directory.",
"reason" : "invalid"
} ],
另请注意:您的状态为“Google工程师根据标记Google组设置进行监视和应答。”在这里发布帮助时,但是stackoverflow要求我们有XXXXX点才能使用它!太好了,所以没有人会看到这一点。

  • 我不建议使用两条腿的OAuth 1.0身份验证,因为它已经被Google弃用了

  • 您可以将OAuth 2.0服务帐户与“组设置”API一起使用。只需在必要时按照“替换组设置”中的说明进行操作。但是,没有什么理由这样做,因为您的应用程序仍然需要知道服务帐户要模拟的Google Apps超级管理员的地址,以便使用ac访问组设置API

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

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


感谢您的回复!关于我收到的错误,为什么对组的“谁可以加入”属性进行修补或更新会被解释为试图“隐藏”组并触发该错误?有趣的是,刚刚注意到,这不是您的修补()所做的调用正在更改。组当前是否隐藏?能否尝试使用相同的patch()调用将组设置为取消隐藏,并查看是否成功?可能是,如果设置为隐藏且全局域设置不允许隐藏,则必须取消隐藏组才能使patch()调用成功。