9

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 を使用するコードを試してみて、問題なくファイルの一覧表示/作成/削除に成功したので、コードの認証部分は問題ないはずです。他に何を設定する必要があるか、またはコードに他の問題があるかどうかを判断できませんでした。

助けてくれてありがとう。

4

4 に答える 4

1

このエラーをパスするには、スーパー管理者または適切な権限を使用しているサービス ID を指定する必要があります。

お役に立てれば。-ヴェヌ・マーティ

于 2013-08-13T05:28:28.070 に答える