Сначала немного терминологии
Имя менеджера безопасности (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-имя пользователя при входе в систему.