Рейтинг:1

Отладка входа в Active Directory с помощью MongoDB

флаг eg

Я пытаюсь войти в MongoDB, используя имя пользователя активного каталога. Мы используем Percona для MongoDB, но я считаю, что это действительно должно быть очень похоже на обычную аутентификацию MongoDB 5.x.

Мы пробовали вариацию за вариацией. Вот самая последняя попытка:

сеть:
   тлс:
      режим: требуетсяTLS
      allowConnectionsWithoutCertificates: правда
безопасность:
  авторизация: включена
  LDAP:
    Автор:
      queryTemplate: "dc=domain,dc=local??sub?(&(objectClass=group)(member:1.2.840.113556.1.4.1941:={USER}))"
    серверы: "мой-dc.domain.local"
    транспортная безопасность: нет
    связывать:
      queryUser: "CN=percona,OU=Accounts,OU=My Site,DC=domain,DC=local"
      queryPassword: "суперсекретно"
    userToDNMapping: >-
      [
         {
           совпадение: "(.+)",
           ldapQuery: "dc=domain,dc=local??sub?(&(objectClass=organizationalPerson)(sAMAccountName={0}))"
         }
      ]
установитьпараметр:
  Механизмы аутентификации: "ОБЫЧНАЯ"

Ошибка, которую я получаю:

{"t":{"$date":"2022-05-27T21:31:24.896+00:00"},"s":"I", "c":"ДОСТУП", "id":29052, "ctx":"conn349795","msg":"Сообщение сервера SASL: ({priority}) {msg}","attr":{"priority":2,"msg":"Проверка пароля не удалась"}}

{"t":{"$date":"2022-05-27T21:31:24.896+00:00"},"s":"I", "c":"ДОСТУП", "id":20249, "ctx":"conn349795","msg":"Аутентификация не удалась","attr":{"механизм":"PLAIN","спекулятивный":false,"principalName":"brad.test","authenticationDatabase": "$external","remote":"10.40.14.16:42930","extraInfo":{},"error":"OperationFailed: шаг SASL не выполнен: (пользователь не найден)"}}

Теперь из двух приведенных выше ошибок можно предположить, что пароль был введен неправильно, но я четырежды проверил правильность пароля в mongod.conf. Я также проверил правильность имени пользователя и пароля пользователя, с которым я подключаюсь к mogodb.

Также есть упоминание о том, что пользователь не найден, но если я возьму свое имя пользователя и запрошу активный каталог напрямую, используя: (objectClass=organizationalPerson)(sAMAccountName=brad.test), я верну свою учетную запись.

Аналогичным образом, если я запрашиваю активный каталог, используя: (objectClass=group)(member:1.2.840.113556.1.4.1941:=CN=Brad - Test,OU=Foo,OU=Bar,DC=domain,DC=local) я получаю список групп, в которых я состою.

Я думаю, что мой запрос ldap и мой шаблон запроса верны.

Я должен упомянуть, что в базе данных администратора mongo определено следующее, и моя учетная запись является членом этой группы:

var admin = db.getSiblingDB("admin")
admin.createRole(
   {
     role: "CN=MongoDB Users,OU=Groups,OU=My Site,DC=domain,DC=local",
     привилегии: [],
     роли: [ "userAdminAnyDatabase" ]
   }
)

Если я проверю журнал безопасности на сервере Active Directory, я увижу

Компьютер попытался проверить учетные данные для учетной записи.

Пакет аутентификации: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Учетная запись для входа: percona
Исходная рабочая станция: MY-DC
Код ошибки: 0x0

Код ошибки 0x0 означает, что вход выполнен успешно.

Теперь я не вижу никаких попыток входа в систему для моей учетной записи пользователя brad.test - возможно, это указывает на то, что он не обращается к AD для аутентификации моего пользователя, но я не уверен, почему. К сожалению, существует так много документации как для монго, так и для percona для монго, которая различается в зависимости от того, является ли ваш пользователь AD или LDAP. Трудно было найти работающий пример.

Я чувствую, что что-то маленькое должно быть неправильным, но я не понимаю, что именно. Кто-нибудь еще делал это раньше и есть какие-либо указатели или предложения?

Спасибо Брэд

флаг eg
Что может быть наиболее полезным, так это какой-то способ получить от mongo дополнительную отладочную информацию о процессе аутентификации, чтобы понять, что происходит. Я не вижу опции mongod.conf для настройки детализации. И я пробовал использовать mongosh, и я больше не получаю подробной ошибки.
флаг eg
Вот строка авторизации, с которой я подключаюсь: mongodb://brad.test:[email protected]:27017/?tls=true&authMechanism=PLAIN&authSource=%24external Обычная проверка подлинности неактивного каталога работает нормально.
флаг mx
Я мало знаю о MongoDB, и его менее описательный журнал не помогает. Но если я должен угадать, сообщение об ошибке «сбой проверки пароля» пришло от учетной записи, которую вы использовали для запроса AD ( CN = percona). Последующая ошибка возникла из-за того, что учетная запись запроса не прошла проверку подлинности. Поэтому дважды проверьте свою учетную запись percona вместо «brad.test». Если CN=percona успешно вошел в AD, MongoDB затем проверит, является ли «brad.test» членом определенной группы, что не требует аутентификации brad.test.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.