Сопоставление шаблонов в шаблоне отличительных имен LDAP
Я пытаюсь аутентифицировать пользователей с помощью django_auth_ldap. У меня есть пользователи в 2 разных группах (скажем, Theta & Gamma, Alpha & Rho),
В настоящее время для поиска пользователей я создал 2 бэкенда аутентификации & сопоставил USER_DN_TEMPLATE следующим образом:
'CN=%(user)s,OU=Television,OU=Theta,OU=Gamma,DC=example,DC=com'
к первому бэкенду & вот так :
'CN=%(user)s,OU=Television,OU=Alpha,OU=Rho,DC=example,DC=com'
на второй бэкэнд.
Все остальные настройки одинаковы. Я знаю, что это не идеальная установка, но я хочу знать как должен выглядеть мой DN_TEMPLATE, если мне нужно найти всех пользователей только в одном бэкенде аутентификации?
Там должен быть какой-то REGEX, подобный шаблону для замены Theta/Gamma/Alpha/Rho & тогда это должно работать (аналогично %(user)s
в вышеприведенных шаблонах.
Другой подход будет заключаться в том, чтобы установить некоторые SCOPE_SUBTREE (& другие переменные) так, чтобы он искал всех пользователей в 'DC=example,DC=com'
. Мне нужна помощь по этим переменным & значениям.
Вам нужно оставить AUTH_LDAP_USER_DN_TEMPLATE
без значения, а вместо него установить AUTH_LDAP_USER_SEARCH
.
Метод аутентификации search/bind включает в себя подключение к LDAP-серверу анонимно или с фиксированной учетной записью и поиск отличительного имени аутентифицируемого пользователя. Затем мы можем попытаться снова установить связь с паролем пользователя.
Например, вы можете установить базовый поиск на относительный dn, который является общим для всех пользователей :
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"DC=example,DC=com", ldap.SCOPE_SUBTREE, "(CN=%(user)s)"
)
Или вы можете сузить поиск, используя несколько баз (поисковые союзы) :
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
LDAPSearch("OU=Television,OU=Theta,OU=Gamma,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(CN=%(user)s)"),
LDAPSearch("OU=Television,OU=Alpha,OU=Rho,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(CN=%(user)s)"),
)
Если вы установите значение AUTH_LDAP_USER_DN_TEMPLATE
, django_auth_ldap пропустит фазу поиска и перейдет к прямой привязке, получая DN пользователя из его имени пользователя и пытаясь привязаться как пользователь прямо.
Поскольку шаблон DN допускает только одно заполнение для имени пользователя, вы можете использовать метод прямой привязки только в том случае, если все пользователи имеют свои записи в одном контейнере.