Фильтр поиска, необходимый для поиска пользователя с идентификатором сети в Active Directory - PullRequest
1 голос
/ 22 мая 2019

Обновлено 5/28/2019

Я использую ActiveDirectoryLdapAuthenticationProvider из org.springframework.security.ldap.authentication.ad и searchForUser метод может найти пользователя по электронной почте.

Я используюпо умолчанию searchFilter: (&(objectClass=user)(userPrincipalName={0})).

Но это не работает, если в качестве имени пользователя указан networkID.Итак:

employee@PublicCompanyEmail.com отлично работает

employee_AD_username@internaldomain.com не работает

Оцените любые идеи по этому поводу!

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Хар, ты споткнулся в проблемы eUPN против iUPN. Ваша компания работает с суффиксами UPN, которые создают виртуальный домен с UPN виртуального предприятия для каждого пользователя, хранящегося в поле userPrincipalName. Как только неявный UPN (принципал Kerberos) переопределяется с корпоративным, вам не повезло.

Возможно, вы захотите подумать о чем-то лучше, чем раздражать своих пользователей именем пользователя и паролем снова и снова ... по крайней мере на Tomcat вы можете иметь это , если вы можете жить с <security:jee> в Spring Security.

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

Сначала немного терминологии

Имя менеджера безопасности (SAM) Имя

  The networkID you use to login to the network.

основное имя пользователя (UPN)

 It may be Implicit UPN (iUPN) or Explicit UPN (eUPN).

 An example for iUPN would be: networkID@internalDomain.com

 An example for eUPN would be: employee_name@companyName.com

 eUPN may be defined by network administrator.

 In my case, the UPN we're using in our AD is actually an eUPN.

Синтаксис поискового фильтра

 This is query language for AD.

 We used it to define the filter while searching for objects in AD.

 {0}-occurrence means full username with domain in it. If the domain is defined in LDAP configuration then Spring Security checks if it's present in the entered username to login. If not, then it'll be added.

 {1}-occurrence means whatever entered as username. So, Spring won't do any modification on the provided username.

Если вы хотите иметь возможность войти без указания доменного имени, вам нужно определить домен в конфигурации LDAP

ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(
            "domain",...);

Тогда, если это домен, используемый в адресе электронной почты, этот фильтр:

(&(objectClass=user)(userPrincipalName={0}))

найдет пользователя с и без имени домена.

Тогда, если настроенный домен является внутренним доменом, этот фильтр:

(&(objectClass=user)(sAMAccountName={1}))

найдет пользователя, если предоставлено имя сети с идентификатором сети без doamin.

Если вы не определяете домен для конфигурации LDAP и оставляете его пустым при создании экземпляра объекта, тогда вы сможете искать как UPN, так и sam -account с вхождением {1}, но вы должны предоставить домен для и networkID и email-имя пользователя при входе в систему.

...