• Django项目中添加ldap登陆认证功能的实现


    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

  • 相关阅读:
    For-Each循环
    test
    网络学习一
    Struts2的interceptor
    Struts2的action解读
    js 读取<select>标签选项 索引
    java项目打jar包
    图解sendRedirect和forward的区别
    导入外部项目无法识别为Web项目无法部署到tomcat
    项目乱码的分析与解决
  • 原文地址:https://www.cnblogs.com/yizhipanghu/p/16066453.html
Copyright © 2020-2023  润新知