Примечание. На самом деле я уже решил эту проблему, но я не вижу в Интернете подробных описаний этой проблемы, поэтому я задам вопрос и сам отвечу на него.
Я запускаю службу, которая аутентифицируется как SMTPRelayUser это начинало давать сбои аутентификации ADFS примерно в 95% случаев. Необъяснимо, но иногда этому пользователю удавалось аутентифицироваться и отправлять всю почту, которая стояла в очереди с течением времени. В журналах средства просмотра событий ADFS я видел две ошибки - событие 300 и событие 413. Событие с идентификатором 300 не предлагало никакой полезной информации, но 413 уведомило меня о странном исключении.
Microsoft.IdentityServer.Service.AccountPolicy.ADAccountLookupException: Exception of type 'Microsoft.IdentityServer.Service.AccountPolicy.ADAccountLookupException' was thrown.
В чем дело?
Я проверил репликацию этой учетной записи на контроллерах домена и не увидел причин, по которым это должно приводить к сбою. Я включил ведение журнала отладки ADFS и снова попытался войти в систему. На этот раз я был вознагражден очень четким предупреждением, которое продолжило ADAccountLookupException в журнале отладки трассировки ADFS.
Идентификатор события 53: AccountLockoutPolicy.IsAccountThrottled: системе не удалось прочитать счетчик неверных паролей для пользователя SMTPRelayUser@mydomain.com.
После проверки badPwdCount Атрибут AD для SMTPRelayUser на контроллере домена предпочитается моей фермой ADFS, я увидел, что это действительно не задано.
В этот момент я вспомнил, что включил ADFS 2012 R2 Защита от блокировки экстрасети некоторое время назад, и это совпало с началом проблем со входом в систему. По-видимому, в функции защиты от блокировки экстрасети есть ошибка, которая выдает исключение, если badPwdCount не настроен. Я отключил функцию защиты от блокировки экстрасети, и вход в систему работал отлично.
Так почему же тогда моя аутентификация работала в 5% случаев? В badPwdCount не реплицируется на контроллеры домена. Каждый DC ведет свой счет. Иногда ADFS обращался к DC, у которого был badPwdCount значение и успешная аутентификация.
Мораль этой истории - быть осторожным, если вы используете функцию защиты от блокировки экстрасети в ADFS. Сам я его пока просто отключил.