2015-04-15 2 views
0

Я разрабатываю приложение django как третье лицо для клиента, и мне нужно использовать LDAP для аутентификации - я предполагал, что отраслевой LDAP-сервер не позволит любому клиенту искать дерево для DN, поэтому я думаю Мне нужно самостоятельно создать DN или каким-либо образом аутентифицировать поиск, который я не могу найти в любом месте в Интернете.LDAP и AD - нам всегда разрешено искать?

У клиента есть два разных типа потребителей для моего приложения - и они расположены в отдельном подразделении.

Мой вопрос: я не глуп? мне нужно беспокоиться об аутентификации поиска? Каков стандартный способ получения DN для пользователя из имени пользователя, которое они дают при входе в систему?

Спасибо!

ответ

1

Это зависит от вашей реализации LDAP.

Active Directory, например, не разрешает поиск без проверки подлинности. В этом случае вы должны сначала войти в систему как аутентифицированный пользователь, а затем выполнить поиск по дереву.

Для других реализаций они могут разрешать анонимные привязки.

Как только вы сможете искать дерево - тогда это просто вопрос правильного запроса. В Active Directory имя входа сохраняется как sAMAccountName, поэтому для извлечения пользователя вы берете свой логин и привязываете его к поиску; однако сначала вы должны пройти аутентификацию. Вот какой код это делает (без проверки ошибок):

def get_user(user): 
    user_dn = "DC=DEPARTMENT,DC=FOO,DC=COM" 
    login_attr = '({}={})'.format('sAMAccountName', user) 

    conn = ldap.initialize(your_ldap_url) 

    # The next two lines are required for AD specific 
    # quirks, you may have to comment them for other LDAP servers 
    conn.set_option(ldap.OPT_REFERRALS, 0) 
    conn.set_option(ldap.OPT_PROTOCOL_VERSION, 3) 

    conn.bind("Foo User", "Sekret") # Authenticate first 
            # before searching 
    result = conn.search_s(user_dn, 
          ldap.SCOPE_SUBTREE, 
          login_attr) 
    return result[0][1] 

 Смежные вопросы

  • Нет связанных вопросов^_^