【问题标题】:Google Admin Directory User ErrorGoogle 管理员目录用户错误
【发布时间】:2013-06-22 15:46:36
【问题描述】:

使用 Google API .NET 客户端 v1.3.0-beta。

我创建了一个控制台应用程序,以通过 Service Accounts 的示例代码测试 Google Admin Directory 的基础知识。这应该会给我一个域中所有电子邮件地址的计数。

using System;
using System.Collections.Generic;        
using DotNetOpenAuth.OAuth2;        
using Google.Apis.Admin.directory_v1;
using Google.Apis.Admin.directory_v1.Data;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
using Google.Apis.Services;
using Google.Apis.Util;

namespace ConsoleApplication1
{
    class Program
    {
        private const string SERVICE_ACCOUNT_EMAIL = "012345678901@developer.gserviceaccount.com";
        private const string SERVICE_ACCOUNT_ID = "012345678901.apps.googleusercontent.com";
        private const string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"C:\ConsoleApplication1\randomlyassigned-privatekey.p12";    

        static void Main(string[] args)
        {
            X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);
            var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate)
            {
                ServiceAccountId = SERVICE_ACCOUNT_EMAIL,
                Scope = AdminService.Scopes.AdminDirectoryUser.GetStringValue()
            };

            var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
            var service = new AdminService(new BaseClientService.Initializer()
                {
                    Authenticator = auth
                });

            UsersResource.ListRequest listReq = service.Users.List();
            Users us = listReq.Fetch();
            Console.WriteLine(us.UsersValue.Count);
        }
    }
}

当我尝试 Fetch() 用户列表时出现以下错误:

Google.Apis.Requests.RequestError
Bad Request [400]
Errors [
    Message[Bad Request] Location[ - ] Reason[badRequest] Domain[global]
]

知道我在这里可能做错了什么吗?

【问题讨论】:

  • 我刚刚更新到 v1.4.0-beta,情况变得更糟了。 AdminService 和 ListRequest.Fetch() 似乎都不见了。我尝试切换到新的 DirectoryService,但不知道如何将 ListRequest 放入列表用户。并且我收到包含的库错误,例如“无法加载文件或程序集'System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。系统找不到文件指定。”
  • ListRequest 现在有一个 Execute()。我更新了资源。现在我又回到了同样的错误。
  • 使用下面 JoBe 的建议并将 ServiceAccountUser 添加到提供程序来解决它。按照 JoBe 对 link 的回答,我有了添加 ServiceAccountUser 的想法,所以再次感谢 JoBe!

标签: c# directory google-api google-apps google-admin-sdk


【解决方案1】:

我得到了一些帮助来解决这个问题。 要列出用户,您必须将域或客户作为列表请求的参数传递。 使用客户或域。

@peleyal 帮助我找到了如何做到这一点:

var listReq = service.Users.List();
listReq.Customer = "CUSTOMER_HERE";
listReq.Domain = "DOMAIN_HERE";
Users results = listReq.Execute(); 

【讨论】:

  • 不走运。但它确实给了我另一个错误。无权访问此资源/api [403]
  • 您是否在 APIs 控制台中启用了 api?
  • 找到了。我在这里使用了您的建议并将 ServiceAccountUser 添加到提供程序。它现在正在工作。谢谢!
  • 除此之外,您还可以指定字符串“my_customer”来列出所有域中的所有用户。 listReq.Customer = "my_customer";文档以非常模糊的方式提到了这一点。 developers.google.com/admin-sdk/directory/v1/guides/…
  • “将 ServiceAccountUser 添加到提供者”是什么意思,你在哪里做的?还有这个“提供者”是什么?
【解决方案2】:

在使用新的 Directory API 从域加载用户时,我也面临同样的错误 [Bad Request]。

要删除包含库的错误,请使用https://code.google.com/p/google-api-dotnet-client/wiki/Build 中提到的步骤 还要验证您使用的是正确版本的 .Net,而不是客户端配置文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    相关资源
    最近更新 更多