Google API — настройка аутентификации и клиент .NET

#api #authentication

#API #аутентификация

Вопрос:

Я пытаюсь добиться двух целей из своего клиентского приложения на C #, используя Google API.

  • Перечислите всех пользователей моего каталога Google
  • Получить метаданные всех электронных писем для каждого пользователя

Однако, похоже, что конфигурация моей учетной записи службы вызывает у меня проблемы. Это то, что я сделал.

  1. Созданный проект в console.cloud.google.com
  2. Включен Admin SDK и Gmail API из API и сервисов
  3. Создана учетная запись службы с делегированием домена и получен файл credentials.json.

Настройка учетной записи службы 4. Вкл. admin.google.com Я перешел к элементам управления безопасностью / API и управлению делегированием в масштабах всего домена. Отсюда я добавил новый клиент API из идентификатора клиента моей учетной записи службы и назначил следующие области:

https://www.googleapis.com/auth/gmail.settings.basic

https://www.googleapis.com/auth/gmail.settings.sharing

https://www.googleapis.com/auth/admin.directory.user.readonly

введите описание изображения здесь

Наконец, когда я хочу попытаться получить список пользователей, я получаю сообщение об ошибке: ожидаемый токен доступа OAuth 2, файл cookie для входа или другие действительные учетные данные для аутентификации

  static void Main(string[] args)
    {
        
        using (var stream =
            new FileStream("..\..\..\credentials.json", FileMode.Open, FileAccess.Read))
        {
        var credential = GoogleCredential.FromFile("..\..\..\credentials.json");

            var dirservice = new DirectoryService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "testbuildingnomiproductname",
            });

            var listReq = dirservice.Users.List();
            
            Users allUsers = listReq.Execute();

            int counter = 0;
            foreach (User myUser in allUsers.UsersValue)
            {
                Console.WriteLine("*"   myUser.PrimaryEmail);
                counter  ;
            }

            Console.WriteLine(counter);
            Console.ReadKey();

        }
    }
  

Комментарии:

1. Вы не можете произвольно получать данные от пользователей, у которых в вашей системе нет существующего токена. Самый простой способ эффективно выполнить то, что вы пытаетесь: когда пользователь входит на ваш сайт, сохраните электронное письмо от входа в свою собственную базу данных, чтобы у вас был доступ к токену для выполнения запроса.

2. Чтобы уточнить больше. 1. Google использует OAuth, поэтому я не думаю, что вы можете использовать базовую аутентификацию. 2. Если вы следуете потоку OAuth, вам нужно будет запросить код и использовать этот код с сервера для получения токена.

3. Я думаю, что цель учетных записей служб и делегирования домена в масштабах всего домена заключается именно в том, чтобы иметь возможность выполнять эти действия. Например. в этом примере показано, как обновить подписи электронной почты всех users.moometric.com/integrations/gsuite /… Может быть, я что-то неправильно понял?

4. вы пытаетесь получить электронную почту учетной записи службы или электронные письма всех пользователей, которые используют ваше приложение

5. Мое приложение будет анализировать метаданные электронной почты всех пользователей в моем каталоге Google. Для этого я использую учетную запись службы, чтобы 1) перечислить всех пользователей в моем каталоге 2) Каждый пользователь анализирует метаданные своих электронных писем