1

我需要使用的 LDAP 服务器不支持匿名身份验证,所以我需要使用用户凭据,但我不想将用户名和密码放在配置中。这是一种通过用户凭据对用户进行身份验证的方法吗?

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

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'

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

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

4

2 回答 2

0

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

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

于 2014-06-12T05:16:06.847 回答
0

如果我理解正确 - 您可以AUTH_LDAP_BIND_PASSWORD在 settings.py 中保留为空白,并在调用 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)
于 2015-02-16T03:10:26.447 回答