Соединение API настроек Google Admin для .NET - PullRequest
0 голосов
/ 19 февраля 2019

Я уже давно работаю с API каталогов Google.

Однако мне нужно обновить настройки единого входа в разделе настроек администратора Google.Да, они говорят, что в какой-то момент он будет устаревшим, но, по словам сотрудника Google, пройдет некоторое время, прежде чем будет доступен новый API, а затем будет удален старый.

Сначала, если естьпакет NUGET, пожалуйста, дайте мне знать.Кажется, я не могу найти ничего, что работает с API настроек администратора: https://developers.google.com/admin-sdk/admin-settings/

Моя первая попытка получить настройки единого входа в Google.

Я могу использовать почтальон, чтобы получить эту информациюпоэтому я знаю, что API работает.

Однако я сталкиваюсь с двумя проблемами:

  1. Как я могу аутентифицироваться, используя сертификат службы, который я использую в apis.google.directoryучебный класс?
  2. Ожидая, как мне запросить доступ к настройкам администратора?В каталоге API у меня есть область видимости enum для выбора.Если я делаю ручное соединение с API, я предполагаю, что мне нужно будет вызвать это вручную?

Код

        var certificate = new X509Certificate2(serviceAccountCertPath,
                                               serviceAccountCertPassword,
                                               X509KeyStorageFlags.Exportable);

    // below the scopes are going to get in my way, right?  What is the scope process I need to do for this manually?  
       credential = new ServiceAccountCredential(
                    new ServiceAccountCredential.Initializer(serviceAccountEmail)
                    {
                        Scopes = new[] { DirectoryService.Scope.AdminDirectoryUser, 
                                     DirectoryService.Scope.AdminDirectoryGroup,
                                     DirectoryService.Scope.AdminDirectoryOrgunit},
                        User = _szAdminEmail
                    }.FromCertificate(certificate));

            // I'm not seeing anyway to call the above credentials 
            using (HttpClient client = new HttpClient())
            {

//                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
                client.BaseAddress = new Uri(@"https://apps-apis.google.com/a/feeds/domain/2.0/[mydomain]/sso/general");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                //client.DefaultRequestHeaders.
                HttpResponseMessage response = client.GetAsync("api/Values").Result;  // Blocking call!    
                var products = response.Content.ReadAsStringAsync().Result;
                return products.ToString();
            }

1 Ответ

0 голосов
/ 21 февраля 2019

API настроек администратора не поддерживает аутентификацию служебной учетной записи, вам нужно будет использовать Oauth2. Настройки администратора Oauth

Вы не сможете использовать его очень легко с помощью клиентской библиотеки Google .net, поскольку эта библиотека была разработана для использования с Google Discovery API.Я не думаю, что API настроек администратора является API-интерфейсом для обнаружения.Возможно, вам удастся использовать старую библиотеку gdata. Я не уверен, что если она существует, я не смог найти ее в nuget.Если вы обнаружите, что старая библиотека gdata не поддерживает oauth2, это означает, что вам нужно будет использовать новую библиотеку для этого и подключить библиотеку gdata после.

Я сделал это только перед использованием Googleу меня есть учебник о том, как я это сделал, он может помочь вам здесь

Auth

string clientId = "xxxxxx.apps.googleusercontent.com";
string clientSecret = "xxxxx";


string[] scopes = new string[] { "https://www.googleapis.com/auth/contacts.readonly" };     // view your basic profile info.
try
{
    // Use the current Google .net client library to get the Oauth2 stuff.
    UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret }
                                                                                 , scopes
                                                                                 , "test"
                                                                                 , CancellationToken.None
                                                                                 , new FileDataStore("test")).Result;

    // Translate the Oauth permissions to something the old client libray can read
    OAuth2Parameters parameters = new OAuth2Parameters();
    parameters.AccessToken = credential.Token.AccessToken;
    parameters.RefreshToken = credential.Token.RefreshToken;
    RunContactsSample(parameters);

Если вы не можете найтиБиблиотека gdata для этого вам может повезти, просто используя библиотеку для аутентификации, а затем кодируйте остальные вызовы самостоятельно.Он возвращает XML, а не JSON.

...