django 进行ldap登录验证

在django中进行ldap登录验证并不复杂,只需要在settings.py中进行一些配置即可。

1.安装ldap库。

pip install ldap

pip install django-auth-ldap

2.在setting.py中导入

import ldap

from django_auth_ladp.config import LDAPSearch,GroupOfNamesType

添加:

AUTHENTICATION_BACKENDS = (

        "django_auth_ladp.backend.LDAPBackend",          ##配置为先使用LDAP认证,如通过认证则不再使用后面的认证方式

        "django.contrib.auth.backends.ModelBackend",

)

3.在setting.py中配置ldap

AUTH_LDAP_SERVER_URI = "ldap://xx.x.x.xx:xxx"                                   ##ladp的地址和端口号
AUTH_LDAP_BIND_DN = "cn=xxx,   ou=xxx,  dc=xxx,  dc=xxx"                  ##绑定用户名
AUTH_LDAP_BIND_PASSWORD = "123456"                                              ##这一句和上一句是绑定一个正在使用中的ldap用户名和密码
AUTH_LDAP_USER_SEARCH = LDAPSearch("dc=xxx,dc=xxx", ldap.SCOPE_SUBTREE, "(&(objectClass=person)(sAMAccountName=%(user)s))")

AUTH_LDAP_USER_ATTR_MAP = {

    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
}                                                                     #将账号的姓、名、邮件地址保存到django的auth_user表中,在admin后台可以看到,注意这里并没有绑定密码

AUTH_LDAP_ALWAYS_UPDATE_USER = True        ##是否同步LDAP修改


4.以上步骤配置完成后,可以写登录页面(login.html)和登录的后台逻辑。这里讲一下后台的登录逻辑的写法。

(1)首先获取输入的用户名name和密码password.通过类似request.POST.get("username")获取。"username"是前端标签属性name的值。

(2)使用django内置的authenticate进行验证。

          from django.crontrib.auth import authenticate,login as auth_login

         user = authenticate(username=name,password=password)

         因为前面已经配置过ldap,所以这里会去与ldap的账户进行验证。

        如果用户名或者密码错误,直接返回None.

(3)验证完成后,使用django的登录函数进行登录。

       auth_login(request, user)

       这里说明,ldap登录采用了django内置的登录函数。登录的账户信息会存在auth_user表中,session会存在django_session表中(session默认的过期时间是2周)。值得注意的是,ldap登录的信息虽然也写在auth_user这张表中,但它所对应的password并非是对密码的记录。可能只是对每个帐号首次登录随机生成的一串数字,目前并没有去研究具体是什么。

(4)关于session部分可以有以下几种处理方式:

        a.写退出逻辑的时候,清除django_session表中的session. 使用request.session.flush().

        b.在setting中进行设置:

           SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
           SESSION_COOKIE_AGE = 60*30                         ##session过期时间
           SESSION_EXPIRE_AT_BROWSER_CLOSE = True     ##浏览器关闭,session失效

你可能感兴趣的:(django 进行ldap登录验证)