Django通过django_auth_ladp接入AD认证登录
安装:
pip install django-auth-ldap
需要先安装python-ldap > = 3.0
配置
setting.py
import ldap
from django_auth_ldap.config import LDAPSearch,GroupOfNamesType
要在Django项目中使用auth后端,请添加 ‘django_auth_ldap.backend.LDAPBackend‘到 AUTHENTICATION_BACKENDS。请勿在中添加任何内容 INSTALLED_APPS。
AUTHENTICATION_BACKENDS = [
"django_auth_ldap.backend.LDAPBackend",#先走ldap,再走本地认证
"django.contrib.auth.backends.ModelBackend",
]
注意:LDAPBackend不继承自 ModelBackend。LDAPBackend通过将其配置为从LDAP服务器获取组成员身份,可以独占使用 。但是,如果您想为单个用户分配权限或将用户添加到Django中的组,则需要同时安装两个后端
#ldap的连接基础配置
AUTH_LDAP_SERVER_URI = "ldap://xxx.xxx.xxx.xxx:389" # ldap or ad 服务器地址
AUTH_LDAP_BIND_DN = "CN=administrator,CN=Users,DC=test,DC=com" # 管理员的dn路径
AUTH_LDAP_BIND_PASSWORD = ‘testpassword‘ # 管理员密码
AUTH_LDAP_USER_SEARCH =LDAPSearch("OU=ddc,OU=ddc,dc=ddc,dc=ddc,dc=com",ldap.SCOPE_SUBTREE,"(sAMAccountName=%(user)s)")#允许认证用户的路径
AUTH_LDAP_SEARCH_BASE = os.getenv(‘AUTH_LDAP_1_SEARCH_BASE‘, "OU=ddc,OU=ddc,dc=ddc,dc=ddc,dc=com")
AUTH_LDAP_1_GROUP_SEARCH = LDAPSearch(‘OU=ddc,OU=ddc,dc=ddc,dc=ddc,dc=com‘, ldap.SCOPE_SUBTREE,‘(objectClass=group)‘)#通过组进行权限控制
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
#is_staff:这个组里的成员可以登录;is_superuser:组成员是django admin的超级管理员;is_active:组成员可以登录django admin后台,但是无权限查看后台内容
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_staff": "cn=test_users,ou=groups,OU=test,DC=test,DC=com",
"is_superuser": "cn=test_users,ou=groups,OU=tset,DC=test,DC=com",
}
#当ldap用户登录时,从ldap的用户属性对应写到django的user数据库,键为django的属性,值为ldap用户的属性
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
from django.crontrib.auth import authenticate,login as auth_login
user = authenticate(username=name,password=password)
ldap登录采用了django内置的登录函数。登录的账户信息会存在auth_user表中,session会存在django_session表中