我需要使用的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'
在第二种方式中,我不能使用联合搜索,所以我不能使用它,但它可以在没有密码的情况下进行身份验证。我不知道怎么样,也找不到任何相关信息。
这是一种使用第一种方式而不在配置中输入密码的方法吗?
答案 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)