Используете Google Directory API для .Net?

Я пытаюсь создать свое первое консольное приложение, используя Google Directory API для .Net.

У меня есть код, основанный на образце Google. Он показывает мне пару ошибок, одна из них возникает, когда я пытаюсь создать службу:

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

Он показывает мне: «Ошибка 3« Google.Apis.Services.BaseClientService.Initializer »не содержит определение« Authenticator »»

И вторая ошибка именно в этой функции

private static IAuthorizationState GetAuthorization(NativeApplicationClient arg){}

Он показывает мне: «DotNetOpenAuth.OAuth2.UserAgentClient» определен в сборке, на которую нет ссылок».

В этом случае я набрал (используя консоль nuget): PM> Install-Package DotNetOpenAuth -Version 4.3.4.13329 .... но это не решает мою проблему.


Это мой код:

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";
        String CLIENT_SECRET = "YOUR_CLIENT_SECRET";

        // 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):
        Process.Start(authUri.ToString());
        Console.WriteLine();
        Console.Write("Authorization Code: ");
        string authCode = Console.ReadLine();

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

Заранее благодарим за помощь


person Orlando Herrera    schedule 07.02.2014    source источник
comment
см. мой код здесь stackoverflow.com/questions/54868344/   -  person Zunair    schedule 05.03.2019


Ответы (1)


должен иметь сервисный аккаунт с делегированием полномочий на уровне домена Google Apps, как определено в

https://developers.google.com/admin-sdk/directory/v1/guides/delegation

он говорит добавить его в «Управление доступом к стороннему клиенту OAuth», у меня было «Управление доступом к клиенту OAuth»

 String serviceAccountEmail = "[email protected]";
                X509Certificate2 certificate = new X509Certificate2(@"C:\key.p12", "notasecret", X509KeyStorageFlags.Exportable);
                ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
                {
                    Scopes = new[]
                    {
                        DirectoryService.Scope.AdminDirectoryUser
                    },
                    User = "[email protected]"
                }.FromCertificate(certificate));

                var ser = new DirectoryService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Get it to work",
                });

                User newuserbody = new User();
                UserName newusername = new UserName();
                newuserbody.PrimaryEmail = "[email protected]";
                newusername.GivenName = "jack";
                newusername.FamilyName = "black";
                newuserbody.Name = newusername;
                newuserbody.Password = "password";

                User results = ser.Users.Insert(newuserbody).Execute();
person heyyan khan    schedule 12.08.2014