#api #authentication
#API #аутентификация
Вопрос:
Я пытаюсь добиться двух целей из своего клиентского приложения на C #, используя Google API.
- Перечислите всех пользователей моего каталога Google
- Получить метаданные всех электронных писем для каждого пользователя
Однако, похоже, что конфигурация моей учетной записи службы вызывает у меня проблемы. Это то, что я сделал.
- Созданный проект в console.cloud.google.com
- Включен Admin SDK и Gmail API из API и сервисов
- Создана учетная запись службы с делегированием домена и получен файл 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) Каждый пользователь анализирует метаданные своих электронных писем