Google が提供する .NET クライアント ライブラリを介して、Google Provisioning API (まもなく非推奨) を使用するためのコードを Admin SDK Directory 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();
厳密にはロケット科学ではなく、必要な資格情報はドメイン、ドメインの管理者の電子メール、および管理者のパスワードだけでした。これら 3 つのパラメーターを指定できる限り、任意のドメインのグループを取得できます。
新しい Admin SDK Directory API (新しい .NET クライアント ライブラリ経由) を使用して同等の呼び出しを作成しようと 2 日間試みましたが、非常に苦労しました。私がそれをまったく機能させることができた唯一の方法は、mwpreston による有用な投稿に基づいて、秘密鍵ファイルの生成を含む、ドメインの管理者の電子メールに関連付けられたプロジェクトのサービス アカウントを作成することです):
//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();
ただし、サービス アカウントは (サービス アカウントの管理者メール アカウントで指定されているように) 特定のドメインに関連付けられているため、その特定のドメインからグループを要求するためにのみ使用できます。
何千もの異なるドメインを持つクライアントがいます。すべてのクライアントのドメイン (および秘密鍵ファイル) に対して新しいサービス アカウントを作成するのは現実的ではありません。
同じパラメーター (ドメイン、管理者の電子メール、およびパスワード) を使用する方法で DirectoryService を呼び出す方法を検索して検索しましたが、何も見つかりません。Admin API .NET クライアント ライブラリのドキュメントは非常にまばらで、役に立ちません。
Provisioning API は 2015 年 4 月 20 日に非推奨になるため、他の誰かがこの問題に直面したに違いありません。誰でも助けることができますか?