首页 > 编程 > Python > 正文

django使用LDAP验证的方法示例

2020-02-16 00:02:55
字体:
来源:转载
供稿:网友

1.安装Python-LDAP(python_ldap-2.4.25-cp27-none-win_amd64.whl)pip install python_ldap-2.4.25-cp27-none-win_amd64.whl

2.安装django-auth-ldap(django-auth-ldap-1.2.8.tar.gz)(下载:https://pypi.python.org/pypi/django-auth-ldap),Windows下也可以使用 python setup.py install

安装成功后运行命令,运行成功表示安装成功

from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType 

3.配置settings.py,增加如下:

参考:https://pypi.python.org/pypi/django-auth-ldap/1.2.1说明文档

# -*- coding: UTF-8 -*-import ldapfrom django_auth_ldap.config import LDAPSearch #导入LDAP modelAUTHENTICATION_BACKENDS = (   'django_auth_ldap.backend.LDAPBackend', #配置为先使用LDAP认证,如通过认证则不再使用后面的认证方式  'django.contrib.auth.backends.ModelBackend', ) AUTH_LDAP_SERVER_URI = 'ldap://192.168.200.20:389'AUTH_LDAP_BIND_DN = 'CN=test01,OU=ServerAdmin,DC=uu,DC=yyy,DC=com'AUTH_LDAP_BIND_PASSWORD = '123456' OU = unicode('OU=中文名,DC=uu,DC=yyy,DC=com', 'utf8') #限制哪个OU中的用户可以进行AD认证。如果OU中包含有中文字符,则需要这样写,否则会出现ascii无法识别的报错(UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position)# OU0 = 'OU=ServerAdmin,DC=uxin,DC=youxinpai,DC=com'# OU = unicode('OU=优,DC=uxin,DC=youxinpai,DC=com', 'utf8')# OU1 = u'OU=优,DC=uxin,DC=youxinpai,DC=com'# OU2 = u'OU=/u4f18,DC=uxin,DC=youxinpai,DC=com'# OU == OU1 == OU2 #返回True#检索单个OUAUTH_LDAP_USER_SEARCH = LDAPSearch(OU, ldap.SCOPE_SUBTREE, "(&(objectClass=person)(sAMAccountName=%(user)s))")# 检索多个OU:# AUTH_LDAP_USER_SEARCH = LDAPSearchUnion( #   LDAPSearch("ou=user,ou=ou1,ou=ou,dc=cn,dc=com",ldap.SCOPE_SUBTREE, "(&(objectClass=user)(sAMAccountName=%(user)s))"), #   LDAPSearch("ou=user,ou=ou2,ou=ou,dc=cn,dc=com",ldap.SCOPE_SUBTREE, "(&(objectClass=user)(sAMAccountName=%(user)s))"), # ) #将账号的姓、名、邮件地址保存到django的auth_user表中,在admin后台可以看到AUTH_LDAP_USER_ATTR_MAP = {   "first_name": "givenName",  "last_name": "sn",  "email": "mail"} 

同步用户组信息:

当用户登录后,如果用户属于某个组,则会将该组同步到auth_group表中,之后在admin后台可以对该组进行权限设置,之后同属于该组的用户在登录后则具有相应的权限。

当一个用户不再属于某个组,该组也不会被自动删掉,在admin后台手工删掉即可。

from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") #返回的组的类型,并用来判断用户与组的从属关系OUg = unicode('OU=安全组,DC=uu,DC=yyy,DC=com', 'utf8')AUTH_LDAP_GROUP_SEARCH = LDAPSearch(OUg,ldap.SCOPE_SUBTREE, "(objectClass=group)" ) #搜索某个OU下组信息 AUTH_LDAP_MIRROR_GROUPS = True #导入用户的组信息,在用户登录的时候把用户的域组关系同步过来。每次用户登录时,都会把用户的组关系删除,重新从ldap中进行同步(解决办法参考后面)AUTH_LDAP_ALWAYS_UPDATE_USER = True #是否同步LDAP修改            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表