【问题标题】:Group as Owner or Manager Fails with 400 error作为所有者或管理者的组失败并出现 400 错误
【发布时间】:2015-07-22 00:58:06
【问题描述】:

当尝试以另一个组的管理员或所有者身份更新组时,我收到一个请求错误:

Google.GoogleApiException: Google.Apis.Requests.RequestError
Invalid Input: memberKey [400]
Errors [
    Message[Invalid Input: memberKey] Location[ - ] Reason[invalid] Domain[global]
]

这可能是https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3791 中指出的服务问题

我能从 Google 那里得到官方消息吗? Provisioning API 绝对支持它,并且 API 文档表明它可以通过 https://developers.google.com/admin-sdk/directory/v1/guides/manage-group-members#json-response_2 中的响应来判断


编辑:这段代码演示了错误:

        DirectoryService service = AuthenticateService();

        // Create a group which will contain our group as owner
        var containerGroupRequest = service.Groups.Insert(new Group()
        {
            Name = "Stack Overflow Container Group",
            Email = "test_container@" + domain,
            Description = "Test Group, Please Ignore"
        });

        Group containerGroup;
        try
        {
            containerGroup = containerGroupRequest.Execute();
            Console.WriteLine("Container Group Created. Id: {0}", containerGroup.Id);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error occured creating group. Unable to continue. Exception: {0}", ex.ToString());
            return;
        }



        // Create a group to use as an owner
        var memberGroupRequest = service.Groups.Insert(new Group()
        {
            Name = "Stack Overflow Member Group",
            Email = "test_member@" + domain,
            Description = "Test Member Group, Please Ignore"
        });

        Group memberGroup;
        try
        {
            memberGroup = memberGroupRequest.Execute();
            Console.WriteLine("Member Group Created. Id: {0}", memberGroup.Id);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error occured creating group. Unable to continue. Exception: {0}", ex.ToString());
            return;
        }

        Thread.Sleep(5000); // Give some time for things to update

        // Add the member group to the container group as a member
        var memberRequest = service.Members.Insert(new Member
        {
            Email = memberGroup.Email,
            Role = "MEMBER"
        }, containerGroup.Id);

        Member member;
        try
        {
            member = memberRequest.Execute();
            Console.WriteLine("Member added to containerGroup. MemberId: {0}", member.Id);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Adding member to container group failed. Error: {0}", ex.ToString());
            return;
        }

        Thread.Sleep(5000); // Give some time for things to update

        // Update the membership so the group is an owner
        member.Role = "OWNER";
        var ownerRequest = service.Members.Update(member, containerGroup.Id, member.Email);

        Member owner;
        try
        {
            owner = ownerRequest.Execute(); // <!-- This is where the 400 error occurs.
            Console.WriteLine("Member updated to be owner. MemberId: {0}", owner.Id);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Updating membership to ownership failed. Error: {0}", ex.ToString());
            return;
        }

它的输出:

Container Group Created. Id: 01ci93xb1y7qh7z
Member Group Created. Id: 04i7ojhp23eifv2
Member added to containerGroup. MemberId: 04i7ojhp23eifv2
Updating membership to ownership failed. Error: The service admin has thrown an exception: Google.GoogleApiException: Google.Apis.Requests.RequestError
Invalid Input: memberKey [400]
Errors [
        Message[Invalid Input: memberKey] Location[ - ] Reason[invalid] Domain[global]
]

  at Google.Apis.Requests.ClientServiceRequest`1.Execute() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release\bin\Debug\test\default\Src\GoogleApis\Apis\Requests\ClientServiceRequest.cs:line 96
  at GOwnerFailTest.Program.GroupTest() in d:\Repo\GSync\GOwnerFailTest\Program.cs:line 103

【问题讨论】:

  • 1.我会附上您正在使用的代码。 2. 您能否使用 Google API Explorer - developers.google.com/apis-explorer/#p 检查您的调用是否有效?
  • 今天晚些时候我会写一段演示代码。但是它在 API Explorer 中也失败了;不管我是使用 Group ID 还是 Group Email 作为 memberKey。
  • @peleyal 支持人员告诉我,从未支持作为所有者的群组。这显然是它首先工作的供应 API 的一个错误(供应 API 参考另有说明)。是这样吗?
  • 我不是任何特定 API 的专家,我是库及其生成库的维护者(我们有 100 多个用于驱动器、存储、分析、youtube 等的库)。因此,我对特定 API 没有足够的经验。如果 Google API Explorer 对您不起作用,则意味着不会发生任何奇迹。 .NET 库也不适合您。
  • @peleyal 很公平。有没有办法联系 Admin SDK 团队?

标签: google-admin-sdk google-api-dotnet-client


【解决方案1】:

即使是 Provisioning API explicitly supported groups as other groups,支持作为其他组所有者的组的官方说法是:

事情的真相是Directory API不允许设置 组作为其他组的所有者,Provisioning API 已 已弃用,并且管理控制台有异常,仍然让您 将所有者角色分配给组。配置 API 未指定您 也可以或应该将一个组指定为其他组的所有者。

文章中总会有一些未指定的细节。 虽然,我们在改善我们的服务和 文档,总是有人为因素。

很不幸,你如此依赖这个异常,以至于 已部分修复。

尽管多年来我们已成功在 30 多所学校中使用 Google 网上论坛,但这种功能更改(有意或无意)意味着网上论坛服务现在无法满足我们的要求。因此,我们正在将我们的邮件组迁移到 Office 365,这至少允许您通过 PowerShell 设置成员发布权限。

希望 Google 能够推出一个 API,用于配置个人成员发布权限,这将使我们能够以编程方式正确地授予我们的邮件组权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 2020-12-28
    • 1970-01-01
    • 2019-10-04
    • 2014-08-02
    • 2017-10-04
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多