使用django中的用户凭据进行LDAP身份验证

时间:2014-06-11 09:58:21

标签: django authentication ldap django-authentication django-auth-ldap

我需要使用的LDAP服务器不支持anonymoys身份验证,因此我需要使用用户凭据,但我不想在config中输入用户名和密码。这是通过他的凭据验证用户的方式吗?

我可以使用config进行身份验证,如下所示:

AUTH_LDAP_SERVER_URI = 'ldap://ldap.host.name'
AUTH_LDAP_BIND_DN = 'username'
AUTH_LDAP_BIND_PASSWORD = 'password'
AUTH_LDAP_USER_SEARCH = LDAPSearchUnion(
    LDAPSearch('OU=MyOU,DC=MyDC,DC=MySiteName,DC=com',ldap.SCOPE_SUBTREE,'(&(memberOf=CN=MyGroup,OU=MyRole,DC=MyDC,DC=MySiteName,DC=com)(sAMAccountName=%(user)s))'),
    LDAPSearch('OU=MyOtherOU,DC=MyDC,DC=MySiteName,DC=com',ldap.SCOPE_SUBTREE,'(&(memberOf=CN=MyOtherGroup,OU=MyRole,DC=MyDC,DC=MySiteName,DC=com)(sAMAccountName=%(user)s))'),
)

或此(没有任何其他数据):

AUTH_LDAP_SERVER_URI = 'ldap://ldap.host.name'
AUTH_LDAP_USER_DN_TEMPLATE = '%(user)s'

在第二种方式中,我不能使用联合搜索,所以我不能使用它,但它可以在没有密码的情况下进行身份验证。我不知道怎么样,也找不到任何相关信息。

这是一种使用第一种方式而不在配置中输入密码的方法吗?

2 个答案:

答案 0 :(得分:0)

您是否可以用户身份登录LDAP服务器以找到要登录的用户?我不会去。如果我理解这个问题,你就会想要一些逻辑上不可能的东西。

如果您担心将凭据检入源控件或其他内容,则应将它们放在服务器上的文件中,并在运行时将其读入settings.py.

答案 1 :(得分:0)

如果我理解正确 - 您可以在settings.py中将AUTH_LDAP_BIND_PASSWORD留空,并在调用authenticate()方法之前使用用户提交的密码在表单中更新它,如下所示:

def auth_and_login(request, onsuccess='/', onfail='/login/'):
    if request.method == 'POST':
        username = request.POST['user']
        password = request.POST['password']

        settings.AUTH_LDAP_BIND_PASSWORD = password
        user = auth.authenticate(username=username, password=password)

        if user is not None and user.is_active:
            auth.login(request, user)
            return redirect(onsuccess)
        else:
            return redirect(onfail)