V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
labulaka
V2EX  ›  Python

求助!使用 Django 的插件 django_auth_ldap 来代替 django 的自带认证系统来登陆 django 的后台管理 出现 dc=------inc,dc=local is not a member of 的错误

  •  
  •   labulaka · 2018-09-10 16:22:19 +08:00 · 2138 次点击
    这是一个创建于 2271 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想用 ldap 来代替 django 自带的认证系统,来登陆 django 的自带后台,用的这个库 https://github.com/django-auth-ldap/django-auth-ldap 这是我的配置文件

    # LDAP
    # AUTH_LDAP_START_TLS
    AUTH_LDAP_SERVER_URI = "ldap://ldap.------.com"  #配置 ldap 的服务地址
    
    # 指定使用 ldap 作为认证系统
    AUTH_LDAP_BIND_DN = ""
    AUTH_LDAP_BIND_PASSWORD = ""
    
    # ldap 的用户搜索的路径,可以使用 LDAP 的客户端查看用户的搜索路径
    # 我这边使用的 ldapBorwser 查看的 ldap 账号结构和信息
    AUTH_LDAP_USER_SEARCH = LDAPSearch("OU=运维开发,OU=后端开发,OU=技术部,OU=------,DC-------,DC=local",
        ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
    # print(AUTH_LDAP_USER_SEARCH)
    #
    # # ldap 用户组的搜索路径
    AUTH_LDAP_GROUP_SEARCH = LDAPSearch("OU=运维开发,OU=后端开发,OU=技术部,OU=-----,DC=-----,DC=local",
        ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)")
    
    
    AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr="cn")
    # AUTH_LDAP_GROUP_TYPE = "OU=运维开发,OU=后端开发,OU=技术部,OU=------,DC=-------,DC=local"
    print(AUTH_LDAP_GROUP_TYPE)
    
    # AUTH_LDAP_REQUIRE_GROUP = 'OU=运维开发,OU=后端开发,OU=技术部,OU=------,DC=-------,DC=local'
    # ldap 中对于的用户属性同步到 django 用户账号的属性对应列
    AUTH_LDAP_USER_ATTR_MAP = {
        "username": "uid",
        "email": "mail",
        'first_name': "sn",
        "last_name": "givenName"
    }
    
    AUTH_LDAP_USER_FLAGS_BY_GROUP = {
    #定义用户可以登录 admin 后台的组是哪个,前面 ldap 中已经创建了这个组,并加入了指定用户
    # 默认创建的 django 用户是不能登录 admin 后台的
        "is_staff": "OU=运维开发,OU=后端开发,OU=技术部,OU=------,DC=------,DC=local",
        "is_active": "OU=运维开发,OU=后端开发,OU=技术部,OU=-------,DC=------,DC=local",
        "is_superuser": "OU=运维开发,OU=后端开发,OU=技术部,OU=--------,DC=------,DC=local"
    }
    
    # 同步 ldap 的用户信息到 django 中
    # 如果第一次登录 django 中没有此用户,ldap 中有,可以自动在 django 中将用户复制过去,并指定权限
    AUTH_LDAP_ALWAYS_UPDATE_USER = True
    
    # 设定 django 第一采用 ldap 权限认证,如果 ldap 中没有用户,再使用 django 中的用户认证
    AUTHENTICATION_BACKENDS = (
        'django_auth_ldap.backend.LDAPBackend',
        # 'django.contrib.auth.backends.ModelBackend',
    )
    

    这是 log 记录

    我登陆的这个用户在 OU=运维开发,OU=后端开发,OU=技术部,OU=--------,DC=------,DC=local 这个目录中

    在作者的 issue 里也只搜到了一个没用的 issue https://github.com/django-auth-ldap/django-auth-ldap/issues/71

    我觉得是验证用户组那里出现了问题但是调试了好长时间还是这样

    ps: 一些重要信息已经删除或者替换

    1 条回复    2020-06-10 17:53:46 +08:00
    37Y37
        1
    37Y37  
       2020-06-10 17:53:46 +08:00
    偶然搜到这个问题,之前写过一篇文章,分享给后边的人少踩点坑吧

    https://blog.ops-coffee.cn/s/znlufjq67rdct5aicmtmyg
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3551 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:14 · PVG 19:14 · LAX 03:14 · JFK 06:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.