Как получить буквальное значение ключа объекта JS - PullRequest
0 голосов
/ 19 сентября 2019

Я общаюсь с 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' ] 
}
...