django域账号认证
作者:互联网
setting配置
# settings配置 import ldap from django_auth_ldap.config import LDAPSearch AUTHENTICATION_BACKENDS = ( # 配置为先使用LDAP认证,如通过认证则不再使用后面的 'django_auth_ldap.backend.LDAPBackend', # 本地用户验证,如果不需要的,可以注释掉 # 'django.contrib.auth.backends.ModelBackend', ) base_dn = 'dc=xxx,dc=xxx,dc=com' # ldap的域名信息(例如baidu.com,可以拆分为baidu跟com) AUTH_LDAP_SERVER_URI = 'ldap://xxx.xxx.com:389' # ldap服务器地址及端口 AUTH_LDAP_BIND_DN = 'CN=app dzkfyw001,OU=AppUsers,DC=xxx,DC=xxx,DC=com' # 用户名,可以使用自己的用户名,用户名后面要加上域名 AUTH_LDAP_BIND_PASSWORD = 'xxx' # 对应用户名的密码 # LDAPSearch # 参数1:搜索的用户信息,ou是组织,后面格式化输出的是你的用户名信息, # 参数2:默认,参数3:搜索的用户,我使用的user,有的公司是uid,如果不知道,可以尝试下 #默认不加ou就是默认搜索所有ou AUTH_LDAP_USER_SEARCH = LDAPSearch('%s' % base_dn, ldap.SCOPE_SUBTREE, "(SamAccountName=%(user)s)") AUTH_LDAP_ALWAYS_UPDATE_USER = True # 如果ldap服务器是Windows的AD,需要配置上如下选项 AUTH_LDAP_CONNECTION_OPTIONS = { ldap.OPT_DEBUG_LEVEL: 1, ldap.OPT_REFERRALS: 0, } # 当ldap用户登录时,从ldap的用户属性对应写到django的user数据库,键为django的属性,值为ldap用户的属性 AUTH_LDAP_USER_ATTR_MAP = { "first_name": "givenName", "last_name": "sn", "email": "mail" }
view.py认证:
def login(request): if request.method == 'POST': username = request.POST.get('username', None) password = request.POST.get('password', None) # 先验证ldap账户,如果不存在,则会验证本地用户 ldap_user = authenticate(username=username, password=password) # 验证通过后,可以看到,本地auth_user表中,会自动添加一条同步的用户信息 print("ldap_user: ",ldap_user) if ldap_user is not None: auth.login(request, ldap_user) request.session['user'] = username return HttpResponseRedirect(reverse("index"), {'user': ldap_user}) else: return render(request, 'login.html', {"error": "用户或密码错误"}) else: return render(request, 'login.html')
LDAP Admin工具:http://www.xitongzhijia.net/soft/208026.html
ldap:
baseDn: DC=xxx,DC=xxx,DC=com
userDn: CN=xxx,OU=PubUsers,DC=xxx,DC=xxx,DC=com
标签:账号,xxx,request,DC,认证,LDAP,user,ldap,django 来源: https://www.cnblogs.com/yizhipanghu/p/16066453.html