Аутентифицировать пользователя LDAP, если он входит в определенную группу

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

Я использую библиотеку ldapauth-fork для аутентификации LDAP.

Я пробовал различные подходы к фильтрам, но ни один из них не работает должным образом. Ниже приведены попытки, которые я пробовал:

let ldapConnector = new LdapAuth (
    {
        url              : config.ldap.url,
        bindDN           : config.ldap.bindDN,
        adminPassword    : config.ldap.adminPassword,
        searchBase       : config.ldap.searchBase,
        searchFilter     : "(&(sAMAccountName=testUser)(memberOf=testGroup))",
        cache            : true,
        includeRaw       : true,
        log              : logger
    }
);

Для этой конфигурации я всегда получаю no such user: "testuser", даже если пользователь является членом группы testGroup.

let ldapConnector = new LdapAuth (
    {
        url               : config.ldap.url,
        bindDN            : config.ldap.bindDN,
        adminPassword     : config.ldap.adminPassword,
        searchBase        : config.ldap.searchBase,
        searchFilter      : "(sAMAccountName=testuser)", 
        groupSearchFilter : "(member=testGroup)"`
        cache             : true,
        includeRaw        : true,
        log               : logger
    }
);

Для этой конфигурации аутентификация всегда проходит успешно, даже если имя группы представляет собой случайную строку.

Итак, какой должна быть правильная строка фильтра, чтобы аутентификация работала?


person Prerak Sola    schedule 18.04.2018    source источник
comment
Используете ли вы Microsoft Active Directory, OpenLDAP или что-то еще?   -  person T-Heron    schedule 19.04.2018
comment
@T-Heron Я использую Microsoft Active Directory.   -  person Prerak Sola    schedule 19.04.2018


Ответы (1)


Я вижу, что вы хотите, чтобы поисковый фильтр LDAP соответствовал «имя пользователя = x и группа = y». Для этого вам необходимо указать полное отличительное имя для значения атрибута memberOf.

Это должно работать:

(&(sAMAccountName=testuser)(memberOf=cn=testGroup,cn=Users,DC=yourdomain,DC=yourdomainsuffix))

В приведенном выше примере предполагается, что testGroup находится в расположении по умолчанию CN=Users в вашем домене Active Directory. Если он находится в другом месте, измените путь LDAP соответствующим образом. Например, это работает в моем изолированном тестовом домене, потому что я не переместил группу GroupA из контейнера Users:

(&(sAMAccountName=Todd)(memberOf=cn=GroupA,cn=Users,DC=dev,DC=local))

РЕДАКТИРОВАТЬ (20.04.2018): во втором сценарии, согласно комментарию mvreijn, groupSearchFilter служит только для запроса списка групп, членом которых является действительный пользователь. Он не играет роли при аутентификации.

person T-Heron    schedule 19.04.2018
comment
groupSearchFilter служит только для запроса списка групп, членом которых является действительный пользователь. Он не играет роли при аутентификации. - person mvreijn; 19.04.2018
comment
@mvreijn - +1 тебе! Хороший. - person T-Heron; 19.04.2018
comment
Мне не хватало полного пути для моей группы. Спасибо @T-Херон :) - person Prerak Sola; 23.04.2018