Asp.net Google Admin SDK目录API-从不同域获取组

Asp.net Google Admin SDK目录API-从不同域获取组,asp.net,google-directory-api,google-provisioning-api,Asp.net,Google Directory Api,Google Provisioning Api,我正试图通过Google提供的.NET客户端库,将使用(即将被弃用)Google Provisioning API的代码迁移到AdminSDK目录API 在旧的资源调配API(通过.NET客户端库)中,获取域组的调用非常简单: Google.GData.Apps.AppsService apps = new Google.GData.Apps.AppsService(AppDomain, DomainAdminEmail, AdminPassword); Google.GData.Apps.Gr

我正试图通过Google提供的.NET客户端库,将使用(即将被弃用)Google Provisioning API的代码迁移到AdminSDK目录API

在旧的资源调配API(通过.NET客户端库)中,获取域组的调用非常简单:

Google.GData.Apps.AppsService apps = new Google.GData.Apps.AppsService(AppDomain, DomainAdminEmail, AdminPassword);
Google.GData.Apps.Groups.GroupsService service = apps.Groups;
AppsExtendedFeed appsFeed = service.RetrieveAllGroups();
不完全是rocket science,唯一需要的凭据是域、域的管理电子邮件和管理密码。只要您可以提供这三个参数,就可以获得任何域的组

两天来,我一直在尝试使用新的ADMINSDK目录API(通过新的.NET客户端库)创建一个等效的调用,这让我感到非常困难。我能够让它工作的唯一方法是为与域的管理电子邮件相关联的项目创建一个服务帐户,包括根据mwpreston提供的有用信息生成一个私钥文件):

但是,由于服务帐户与特定域关联(如服务帐户的管理电子邮件帐户中所指定),因此它只能用于从该特定域请求组

我们有数千个不同领域的客户。为每个客户端的域(以及私钥文件)创建一个新的服务帐户是不切实际的

我一直在寻找一种调用DirectoryService的方法,这种方法使用相同的参数(域、管理员电子邮件和密码),但我什么也找不到。ADMINAPI.NET客户端库的文档非常稀少,没有任何帮助


配置API将在2015年4月20日被弃用,因此那里一定有其他人面临过这个问题。有人能帮忙吗?

您应该使用“模拟”(通过.setServiceAccountUser()user@example.com)在构造凭据时。寻找例子

您可以在Google开发者控制台上创建一个项目,并生成一个刷新/访问令牌。这是链接-


我没有使用客户端库,因此无法帮助您编写代码。您可以使用“列表”API,它将为您提供客户所有域的所有组(如果您提供customerId)

不幸的是,这无法解决我的问题。我需要能够从许多不同的域请求组(和组成员)。原始API允许我使用域、管理电子邮件和密码进行调用;新的API似乎坚持要求我为每个域使用特定的服务帐户。这是不切实际的,因为我们的客户端有数千个域。也许我不理解你的问题,但在我的应用程序中,我也通过构造凭证对象(除了serviceAccountUser-target domain admin之外,它仍然是相同的)用一个服务帐户访问不同域的目录信息然后将其传递给目录api构造函数/生成器,如您在以下代码中所看到的…GoogleCredential.builder bgc=new GoogleCredential.builder().setTransport(t).setJsonFactory(jsonFactory).setServiceAccountScopes(scopes).setServiceAccountPrivateKey(serviceAccountPrivateKey).setServiceAccounted(Config.SERVICE\u ACCOUNT\u ID).setServiceAccountUser(serviceAccountUser);Directory dir=new Directory.Builder(gc.getTransport(),gc.getJsonFactory(),null).setHttpRequestInitializer(gc.build());感谢您的反馈-看起来您使用的是Java客户端库,而我必须使用.NET客户端库。不过,您给了我一些非常有用的线索,告诉我如何尝试使用.NET进行复制。我明天将深入研究代码,看看是否可以用.NET处理您在Java中所做的事情。我明天将向您汇报。Hi@user3686724-I当用户的域与服务帐户管理员的域不匹配时,找不到任何请求数据的方法。我发现在Google管理控制台上可以将多个域与帐户关联(Google管理控制台->域->添加域或域别名)。您的帐户就是这样设置的吗?也许这就是为什么您可以通过您的服务帐户从多个域请求数据的原因?
//Create security certificate using private key file and password.
var certificate = new X509Certificate2(pathToPrivateKeyFile, privateKeyPassword, X509KeyStorageFlags.Exportable);

//Create a service credential using the certificate, admin email and API scopes.
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(serviceAccountEmail)
{
    User = adminUserEmail,
    Scopes = scopes
}.FromCertificate(certificate));

//Create Directory Service using the service credential and the application name.
var dirservice = new DirectoryService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = applicationName
 });

 var groupsListRequest = dirservice.Groups.List();
 groupsListRequest.Domain = domain;
 domainGroups = groupsListRequest.Execute();