我们有一个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和“google-api-client”版本1.14.1-beta的v1-rev25-1.14.2-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()”相同的结果。这个消息意味着什么?这是与auth有关吗?还是这个?更新/补丁中的一些无效调用?
{
"code" : 400,
"errors" : [ {
"domain" : "global",
"message" : "Permission denied: Cannot hide from Groups directory.",
"reason" : "invalid"
} ],
另请注意:您的"help" page州 “Google工程师会监控并回复标记google-groups-settings。” 在此处发帖寻求帮助时,但stackoverflow要求我们有XXXXX点才能使用它!太棒了,所以没有人会看到这个。
答案 0 :(得分:3)
我不建议使用双腿OAuth 1.0身份验证,因为Google已弃用它。
您可以将OAuth 2.0服务帐户与Groups Settings API配合使用。只需按照Drive SDK domain-wide guide替换组设置中的说明进行操作。但是,没有理由这样做,因为您的应用仍然需要知道服务帐户的Google Apps超级管理员的地址才能模拟,以便能够访问群组设置API。
访问Groups Settings API的最佳方法可能是标准的OAuth 2.0身份验证。您可以授权为具有超级用户访问权限但仅具有组设置API范围的用户帐户。如果您要求对OAuth身份验证进行离线访问,只要您的令牌未被撤销且用户帐户以超级管理员身份存在,您就可以执行群组设置API调用。
您获得的具体错误意味着在Google Apps域的“控制面板设置”中,在“设置”下,>商业团体 - >分享选项 - >组可见性,“组所有者可以隐藏组目录中的组”未选中。这可以防止隐藏任何组。