Как искать пользователя по SID объекта в ldap - PullRequest
0 голосов
/ 27 мая 2019

У нас такой дизайн, когда SID отсканирован и синхронизирован с локальным LDAP AD Azure v3.возвращается как часть токена JWT.Мне нужно найти пользователя в локальном LDAP для авторизации.Идентификатор безопасности выпускается в хорошо известной сериализованной форме, поддерживаемой инструментами Microsoft, используемыми для начальной синхронизации.Вот среда LDAP:

"java.naming.provider.url" -> "ldap://AD2012.local:389"
 "java.naming.factory.initial" -> "com.sun.jndi.ldap.LdapCtxFactory"
 "com.sun.jndi.ldap.connect.timeout" -> "0"
 "java.naming.security.principal" -> "CN=Administrator,CN=Users,DC=AD2012,DC=local"
 "java.naming.security.authentication" -> "simple"
 "java.naming.security.credentials" -> "Password1"
 "java.naming.referral" -> "follow"

Обратите внимание на последнюю, так как я считаю ее важной.

В моем тесте я сначала запустил поиск, чтобы получить пользователя, используя следующую строку:

(&(|(objectClass=User)(objectClass=userProxy))(cn=Administrator*))

Он работает нормально и позволяет мне получить SID для этого пользователя, который после преобразования строки выглядит как

S-1-5-21-1061109567-1712144220-1378238271-319

Но когда я создаю вторую строку поиска:

(&(|(objectClass=User)(objectClass=userProxy))(objectSid=S-1-5-21-1061109567-1712144220-1378238271-319))

результат поиска пуст.Однако есть подсказка: изучение объекта результата с помощью отладчика показывает, что у него есть следующие свойства:

refEx.handleReferrals = 1
refEx.nextReferralEx = LdapReferralException: Continuation Reference ...
refEx.nextReferals.referrals[0] = ldap://DomainDnsZones.AD2012.local/DC=DomainDnsZones,DC=AD2012,DC=local

Вот вопрос: почему сервер не следует за ссылками во втором - по SID -поиск?Я знаю, что это происходит в первую очередь, так как поиск завершается неудачей, если я удаляю свойство среды follow.Любой вклад приветствуется.

1 Ответ

0 голосов
/ 28 мая 2019

ObjectSID больно работать с LDAP.

ObjectSID - это двоичное значение, которое необходимо преобразовать для использования в Фильтрах поиска LDAP :

Например, предположим, что ваш SID в строковой форме был S-1-5-21-2562418665-3218585558-1813906818-1576. В двоичном виде это:

01,05,00,00,00,00,00,05,15,00,00,00,e9,67,bb,98,d6,b7,d7,bf,82,05,1e,6c,28,06,00,00

поэтому фильтр поиска LDAP будет:

(objectSid=\01\05\00\00\00\00\00\05\15\00\00\00\e9\67\bb\98\d6\b7\d7\bf\82\05\1e\6c\28\06\00\00)
...