JavaEar 专注于收集分享传播有价值的技术资料

Using Google's Directory API for .Net?

I am trying to create my first console app using Google's Directory API for .Net.

I have a code based in a Google's sample. It shows me a couple of errors, one of them is when I am trying to create the service:

var service = new DirectoryService(new BaseClientService.Initializer()
   Authenticator = auth,
   ApplicationName = "Create User",
   ApiKey = "<your API Key from Google APIs console>"

It shows me: "Error 3 'Google.Apis.Services.BaseClientService.Initializer' doesn't contain a definition for 'Authenticator'"

And the second error is in this function

private static IAuthorizationState GetAuthorization(NativeApplicationClient arg){}

It shows me: "DotNetOpenAuth.OAuth2.UserAgentClient' is defined in an assembly that is not referenced."

In this case I typed (using nuget console): PM> Install-Package DotNetOpenAuth -Version .... but it doesnt resolve my problem.

This is my code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Diagnostics;

using DotNetOpenAuth.OAuth2;
using Google.Apis.Authentication.OAuth2;
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth;
//using Google.Apis.Samples.Helper;
using Google.Apis.Services;
using Google.Apis.Util;
using Google.Apis.Admin.Directory.directory_v1;
using Google.Apis.Admin.Directory.directory_v1.Data;

namespace GoogleDirectoryApi_test02_consola
    class Program
        static void Main(string[] args)
        String CLIENT_ID = "YOUR_CLIENT_ID";

        // Register the authenticator and create the service
        var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description, CLIENT_ID, CLIENT_SECRET);
        var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);

        //New User
        User newuserbody = new User();
        string userId = "SampleId01";
        UserName newusername = new UserName();
        newuserbody.PrimaryEmail = userId;

        // Create the service.
        var service = new DirectoryService(new BaseClientService.Initializer()
            Authenticator = auth,
            ApplicationName = "Create User",
            ApiKey = "<your API Key from Google APIs console>"

        User results = service.Users.Insert(newuserbody).Execute();

    private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
        // Get the auth URL:
        //IAuthorizationState state = new AuthorizationState(new[] { DirectoryService.Scopes.AdminDirectoryUser.GetStringValue() });
        IAuthorizationState state = new AuthorizationState(new[] { DirectoryService.Scope.AdminDirectoryUser.ToString() });
        state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
        Uri authUri = arg.RequestUserAuthorization(state);

        // Request authorization from the user (by opening a browser window):
        Console.Write("Authorization Code: ");
        string authCode = Console.ReadLine();

        // Retrieve the access token by using the authorization code:
        return arg.ProcessUserAuthorization(authCode, state);

Thanks in advance for your help


  1. have to have a service account with Perform Google Apps Domain-Wide Delegation of Authority as defined in

    it say to add it in the "Manage third party OAuth Client access" i had "Manage OAuth Client access "

     String serviceAccountEmail = "";
                    X509Certificate2 certificate = new X509Certificate2(@"C:\key.p12", "notasecret", X509KeyStorageFlags.Exportable);
                    ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
                        Scopes = new[]
                        User = ""
                    var ser = new DirectoryService(new BaseClientService.Initializer()
                        HttpClientInitializer = credential,
                        ApplicationName = "Get it to work",
                    User newuserbody = new User();
                    UserName newusername = new UserName();
                    newuserbody.PrimaryEmail = "";
                    newusername.GivenName = "jack";
                    newusername.FamilyName = "black";
                    newuserbody.Name = newusername;
                    newuserbody.Password = "password";
                    User results = ser.Users.Insert(newuserbody).Execute();