[英]authentication django app with ldap3
django应用程序中的身份验证用户遇到问题。 我正在使用Python 3.5和Django 1.10。
我编写了简单的绑定配置来检查用户是否是数据库中的真实用户:
username = request.POST['username']
password = request.POST['password']
server = Server(LDAP_AUTH_URL)
c = Connection(server, user=LDAP_AUTH_CONNECTION_USERNAME, password=LDAP_AUTH_CONNECTION_PASSWORD)
c.open()
c.bind()
if c.bind():
user_search_filter = '(uid={})'.format(username)
c.search(search_base=LDAP_AUTH_SEARCH_BASE,
search_filter=user_search_filter,
search_scope=SUBTREE)
username = c.response[0]['dn']
if c.rebind(user=username, password=password):
return HttpResponseRedirect(next)
但是现在我不知道该怎么办,在django中我们当然有这样的东西:
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
auth.login(request, user)
return HttpResponseRedirect(next)
else:
return render(request, 'login.html', {'error_message': 'Your account has been disabled'})
else:
return render(request, 'login.html', {'error_message': 'Invalid login'})
但是在这种情况下,我们必须在基础中拥有用户帐户,而不是来自ldap授权。
因此,当我通过ldap登录时,我想从django获得授权以使用“ @login_required”访问任何其他视图
对于python> 3的ldap和ldap3,我的想法也许有问题。
有人可以帮助我或给我有用的链接吗?
分开管理用户授权。
添加功能以检查ldap身份验证。 说它将通过提供的凭据返回True/False
。
def ldap_auth(login, password):
...
return c.bind()
因此,在身份验证视图中,对于ldap和非ldap用户,您现在需要两个不同的条件:
# if it is ldap user check ldap_auth
# if user doesn't exist locally you could create it manually in case of successful auth
else:
user = authenticate(username=username, password=password)
在前端,您需要以某种方式指定是否为ldap用户。 或者,您可以根据一些检查来进一步添加一些逻辑:如果没有结果,请尝试在普通用户中查找用户-尝试通过ldap登录。
为LDAP身份验证添加django身份验证后端,例如: /users/auth/backend.py
并在您的settings.py中配置/users/auth/backend.py
,以使django将其用于所有登录调用。
并添加实现LDAP身份authenticate()
方法。 您还需要实现get_user()
方法。
建议您在首次登录时或从应用程序内部首次在活动目录中搜索用户时从LDAP同步用户帐户,并维护应用程序的用户模型。
可在此处找到有关设置身份验证后端和同步用户的更多信息:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.