Natural

 

Django 使用LDAP验证登录

    学习Django做了个小网站,但是如果只用在公司内部的话,特此又要员工注册网站帐号,这个是个槽糕的问题。

    最好的方式就是直接使用员工的计算机帐号来登录,那样就不用为又要为记住个新帐号名密码而苦恼了。

    恰好公司有LDAP服务器,并且存有员工账号信息。这样就可以通过Django的LDAP插件,来完成员工帐号的登录验证功能。

    首先需要安装以下模块:
    python-ldap 2.4.12    https://pypi.python.org/pypi/python-ldap/2.4.12

    安装完成后,django项目中settings.py的ldap配置如下:
 1 #LDAP configuration
 2 import ldap
 3 from django_auth_ldap.config import LDAPSearch
 4 AUTHENTICATION_BACKENDS = (
 5     'django_auth_ldap.backend.LDAPBackend',
 6     'django.contrib.auth.backends.ModelBackend',  
 7 )
 8 
 9 AUTH_LDAP_SERVER_URI = 'ldap://SERVER_IP'
10 AUTH_LDAP_BIND_DN = 'CN=ACCOUNT_NAME,OU=Accounts,DC=ldap,DC=example,DC=com'
11 AUTH_LDAP_BIND_PASSWORD = "PASSWORD"
12 AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=Accounts,DC=ldap,DC=example,DC=com", ldap.SCOPE_SUBTREE, "(&(objectClass=person)(sAMAccountName=%(user)s))")
13 
14 AUTH_LDAP_USER_ATTR_MAP = {
15      "first_name""givenName",
16      "last_name""sn",
17      "email""mail"
18 }

    工作流程:
    登录时,在默认的django数据库帐号验证之前,会先到LDAP服务器上去验证。
    输入的登录帐号到LDAP服务器验证之前,会先用配置文件中的绑定DN、密码去验证,验证通过才能继续用输入的帐号密码去LDAP服务器验证。
    若LDAP验证通过,会检查django数据库中是否已存在该帐号,若不存在,则会根据LDAP验证通过后获取的用户信息,来创建django数据库的用户账号。帐号名和输入的一样,密码则会设为一个无效的密码(看了下源码是"!",无法合法哈希编码),因为该帐号密码验证是从LDAP上进行,所以django中的密码不会被使用到。除了默认的用户姓名、邮件等信息,若要把Group信息也同步过来的话需要进行相应的配置。
    若LDAP验证失败,则会使用Django数据库的默认登录验证。

    PS: LDAP快速入门   http://www.cnblogs.com/obpm/archive/2010/08/28/1811065.html

posted on 2013-06-27 16:30 此号已被删 阅读(7653) 评论(3)  编辑  收藏 所属分类: Python

评论

# re: Django 使用LDAP验证登录[未登录] 2013-10-21 19:23 left

只用配置settings吗  回复  更多评论   

# re: Django 使用LDAP验证登录 2014-11-18 18:12 gaobo

login页面还需要额外写么?
会不会弹出一个http basic的用户名&密码输入框?  回复  更多评论   

# re: Django 使用LDAP验证登录 2014-12-25 11:39 jackyliu

@left
只配置settings 吗?  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

常用链接

留言簿(8)

随笔分类(83)

随笔档案(78)

文章档案(2)

相册

收藏夹(7)

最新随笔

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜