AdminServiceを使用してドメインのユーザーとグループを管理しようとしていますが、ドメインのすべてのユーザーを取得するという単純な要求で行き詰まっています。C# には次のコードがあります。
public Users GetAllUsers()
{
var provider = new AssertionFlowClient(
GoogleAuthenticationServer.Description,
new X509Certificate2(privateKeyPath, keyPassword, X509KeyStorageFlags.Exportable))
{
ServiceAccountId = serviceAccountEmail,
Scope = AdminService.Scopes.AdminDirectoryUser.GetStringValue()
};
var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState);
m_serviceGroup = new AdminService(new BaseClientService.Initializer()
{
Authenticator = auth,
});
var request = m_serviceUser.Users.List();
request.Domain = m_domainName;
return request.Fetch();
}
Fetch() を実行すると、次のような例外が発生します。
Code: 403
Message: Not Authorized to access this resource/api
Error: {Message[Not Authorized to access this resource/api] Location[ - ] Reason[forbidden] Domain[global]}
こちらの手順に従ってAPI アクセスを有効にし、ドメイン コントロール パネルでサービス アカウントを承認しました。
[Security]->[Advanced Setting]->[Authentication]->[Manage third party OAuth Client access]
スコープ付き:
https://www.googleapis.com/auth/admin.directory.group
https://www.googleapis.com/auth/admin.directory.user
Admin SDK Service は、API コントロール パネルでも有効になっています。
DriveService を使用するコードを試してみて、問題なくファイルの一覧表示/作成/削除に成功したので、コードの認証部分は問題ないはずです。他に何を設定する必要があるか、またはコードに他の問題があるかどうかを判断できませんでした。
助けてくれてありがとう。