прерывистая ошибка 412 при вызове Google Directory API для исправления пароля пользователя - PullRequest
1 голос
/ 21 января 2020

Основная функция моего приложения - изменить пароль пользователя Google G-Suite, используя пакет nuget Google.Apis.Admin.Directory.directory_v1.

Вызов API работает 95% времени (и сбрасывает пароль целевого пользователя), но время от времени вызов API выдает исключение с текстом сообщения:

Precondition Failed [412] Ошибки [Message [Precondition Failed] Местоположение [If-Match - header] Reason [ conditionNotMet] Домен [global]]

Я провел много исследований, и кажется, что заданное клиентом предварительное условие включается в вызов (REST?), который выполняет API к серверу API Google, и сервер определяет, что условие не выполняется (см. https://tools.ietf.org/html/rfc7232#section -4.2 ) или состояние изменяемого объекта является плохим (https://developers.google.com/calendar/v3/errors) Странно то, что все работает почти все время, но иногда терпит неудачу. Похоже, что это какая-то ошибка, основанная на ресурсе (слишком много вызовов было отправлено в последнее время, слишком много пользователей лицензировано в домене) или, возможно, неверные данные (неверный или отсутствующий пароль, плохой пользователь) или даже разрешения (пользователь входит в группу). / OU, которым можно управлять). Но сообщение об ошибке ничего не дает при включенном go, и я в основном исключил наиболее очевидные из возможных возможностей. Я погуглил точное сообщение и нашел множество людей с похожими жалобами, но без документированных причин.

Исправление из оригинала: я могу перехватывать REST-вызовы с помощью Fiddler (с настроенным захватом https), но я не могу ' Воспроизвести исходную ошибку во время захвата, так что это мало поможет.

Есть предложения по воспроизведению и / или устранению проблемы?

Вот код (пожалуйста, игнорируйте любые очевидные опечатки - мне пришлось вырезать / вставить / объединить несколько источников, чтобы собрать небольшой простой пример) - реальный код определенно работает почти все время:

{
    userEmail = googleUser + "@" + domain; // e.g. BobSmith@myGoogleDomain.com

    // service is an instance of Google.Apis.Admin.Directory.directory_v1.DirectoryService
    var userget = service.Users.Get(userEmail); 
    User userob = userget.Execute();
    userob.ChangePasswordAtNextLogin = false;
    userob.Password = password;
    patchRequest=service.Users.Patch(userob, userEmail);
    patchRequest.Execute();
}
catch (Exception e)
{}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...