Я общаюсь с Active Directory, который отвечает, например, пользовательскими параметрами.Среди этих параметров - CN и DN.Поскольку структура этого DN может изменяться от системы к системе, мне нужно найти общее решение.
Проблема, с которой я сталкиваюсь, заключается в том, что DN возвращается с двойной обратной косой чертой, например:
User: {
dn: 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL',
cn: 'LastName, Surname'
}
Когда я запрашиваю все группы, к которым принадлежит этот пользователь, это не удается.Когда я пытаюсь получить доступ к ключу 'dn' этого объекта, двойная обратная косая черта автоматически анализируется до одной обратной косой черты.Например:
User dn: CN=LastName\, SurName,OU=People,DC=COMP,DC=NL
И это не дает никаких результатов, потому что члены хранятся в AD с двойной обратной косой чертой.
Мне нужен общий способ получить значение объектаключ в буквальной форме, без JavaScript, разбора escape-символов.
В системе AD для DN также могут встречаться следующие формы:
DN: CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL
DN: CN=LastName\, SurName,OU=People,DC=COMP,DC=NL
DN: CN=Surname LastName,OU=People,DC=COMP,DC=NL
DN: CN=LastName SurName,OU=People,DC=COMP,DC=NL
Я уже пробовал String.raw, escape(), JSON.stringify, но все они приводят к недопустимым DN, которые я могу вставить в поисковый запрос для групп пользователя.
Обновление Как указано в ответах, я былне совсем тщательно в моих объяснениях.Таким образом, возвращаемый объект, как показано выше, является правильным, то есть тем, что возвращается из AD с помощью поиска LDAP (сначала выполняется поиск пользователя).
Затем он внедряется в функцию, которая запрашивает все группы для этого конкретногопользователь, не изменяя и не касаясь объекта, и фильтр создается следующим образом (где ldapUser - объект сверху):
const opts = {
filter: `(&(objectClass=group)(member=${ldapUser.dn}))`,
scope: "sub",
attributes: ["dn", "cn"],
};
Я использую пакет ldapjs, кстати, на NodeJS v10.15.3,Полученный фильтр при печати будет иметь следующий вид:
filter: (&(objectClass=group)(member=CN=LastName\, SurName,OU=People,DC=COMP,DC=NL))
Обновление 2 Итак, вот запрошенный вывод различных операторов console.log:
console.log(ldapUser.dn, opts.filter);
CN=LastName\, SurName,OU=People,DC=COMP,DC=NL (&(objectClass=group)(member=CN=LastName\, SurName,OU=People,DC=COMP,DC=NL))
console.log(ldapUser, ldapUser.dn, opts.filter);
{ dn: 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL',
controls: [],
cn: 'LastName, SurName' } 'CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL' '(&(objectClass=group)(member=CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL))'
console.log(opts);
{
filter: '(&(objectClass=group)(member=CN=LastName\\, SurName,OU=People,DC=COMP,DC=NL))',
scope: 'sub',
attributes: [ 'dn', 'cn' ]
}