我们基于Django框架实现了MySQL数据库管理的web系统,为了能直接使用域用户登录,需要在Django中集成LDAP认证。一开始由于对Django和LDAP都不熟悉,也折腾了很长时间。
首先需要安装以下模块:
django-1.4.3
openldap-2.4.33
python-ldap-2.4.10 (需要有cyrus-sasl-devel.x86_64)
django-auth-ldap-1.1.2
安装完成后,django中的ldap完整配置如下:
import ldap from django_auth_ldap.config import LDAPSearch, LDAPSearchUnion, GroupOfNamesType # Baseline configuration. AUTH_LDAP_SERVER_URI = "ldap://cn.example.com" AUTH_LDAP_BIND_DN = 'cn=username,ou=user,ou=ou1,ou=ou,dc=cn,dc=example,dc=com' AUTH_LDAP_BIND_PASSWORD = 'password' AUTH_LDAP_USER_SEARCH = LDAPSearchUnion( LDAPSearch("ou=user,ou=ou1,ou=ou,dc=cn,dc=example,dc=com",ldap.SCOPE_SUBTREE, "(&(objectClass=user)(sAMAccountName=%(user)s))"), LDAPSearch("ou=user,ou=ou2,ou=ou,dc=cn,dc=example,dc=com",ldap.SCOPE_SUBTREE, "(&(objectClass=user)(sAMAccountName=%(user)s))"), ) # Set up the basic group parameters. AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=groups,ou=ou,dc=cn,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(objectClass=group)" ) AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn") AUTH_LDAP_USER_ATTR_MAP = { "first_name": "first_name", "last_name": "last_name", "email": "mail" } AUTH_LDAP_MIRROR_GROUPS=True AUTHENTICATION_BACKENDS = ( 'django_auth_ldap.backend.LDAPBackend', 'django.contrib.auth.backends.ModelBackend', )
其中LDAPSearchUnion是为了能在不同的ou中搜索用户,没有这个需求的话直接LDAPSearch就行。
AUTH_LDAP_MIRROR_GROUPS=True 这个参数是为了在用户登录的时候把用户的域组关系也获取并记录下
来。不过开启这个参数会带来另外一个问题:每次用户登录时,都会把用户的组关系删除,重新从ldap中进行同步。由于我们的系统中除了域组还有些自定义的组关系,这样一来自定义组的用户关系就不能持久保留了。按照我们的需求,其实只希望在用户第一次登录的时候同步组关系,以后的登录并不需要。这个需求可以通过对django-auth-ldap的源码进行微调来实现。
在django-auth-ldap源码包的backend.py文件中,以下代码决定了用户登录时的行为:
def _get_or_create_user(self, force_populate=False): """ Loads the User model object from the database or creates it if it doesn't exist. Also populates the fields, subject to AUTH_LDAP_ALWAYS_UPDATE_USER. """ save_user = False username = self.backend.ldap_to_django_username(self._username) self._user, created = self.backend.get_or_create_user(username, self) self._user.ldap_user = self self._user.ldap_username = self._username should_populate = force_populate or self.settings.ALWAYS_UPDATE_USER or created if created: logger.debug("Created Django user %s", username) self._user.set_unusable_password() save_user = True if should_populate: logger.debug("Populating Django user %s", username) self._populate_user() save_user = True if self.settings.MIRROR_GROUPS: self._mirror_groups()
在其中进行组信息同步的地方增加一个条件,即可实现只在创建用户时同步组信息的需求:
if self.settings.MIRROR_GROUPS and created: self._mirror_groups()
修改好以后重新编译安装django-auth-ldap,这样就可以完整地实现我们的需求了。
相关推荐
django-auth-ldap-ad, Django 认证后端,支持 Active Directory django-auth-ldap-ad为什么Django 认证后端,支持 Active Directory由于无法找到使用 django-auth-ldap 绑定到SASL的正确方式,所以我创建了这个项目...
'django_auth_ldap.backend.LDAPBackend', # 配置为先使用 LDAP 认证,如通过认证则不再使用后面的认证方式 'django.contrib.auth.backends.ModelBackend', ) # LDAP 服务器 URL AUTH_LDAP_SERVER_URI = 'ldap://...
使用 LDAP 的 Django 身份验证 这是针对 LDAP 服务进行身份验证的 Django 身份验证后端。 配置可以像单个专有名称模板一样简单,但有许多丰富的配置选项可用于处理用户、组和权限。 文档: : PyPI: ://pypi.org/...
基于django-auth-ldap 实现用户名的统一认证 您可以直接使用该项目,或者基于该项目二次开发。 准备做(按优先级排序) 企业微信扫码登录(本地已经正常使用,近期将提交代码) 添加ldap组同步 开发环境 Djnago> = 2...
总结来说,`django-ldap3-sync-1.0.2.tar.gz`是Python开发者用于整合Django和LDAP的利器,它简化了企业级应用中用户管理和认证的复杂度,提高了开发效率。正确理解和使用这个库,可以帮助我们构建更强大、更安全的...
1. **LDAP认证**:django-ldap-server提供了Django中间件,使得应用程序能够通过用户的LDAP凭证进行认证,而非传统的Django用户模型。 2. **用户同步**:项目支持定期或实时从LDAP服务器同步用户信息,包括用户名、...
最近在开发一个Django项目过程中,碰到了通过ldap认证用户登录的需求。由于之前都是自己写密码加密、用户登录等逻辑,连Django自带的认证模块都没用过,无奈网上关于django配置ldp的资料实在不全。因此,自己摸索了...
大部分公司会有部署Ldap系统,来统一运维系统的账号管理,像我们常用的jenkins也可以做对接到ldap上,这样所有的系统就可以统一用ldap来认证,然后根据不同的人来设置不同的权限,那django怎么使用ldap来做后端验证...
公司内部使用Django作为后端服务框架的Web服务,当需要使用公司内部搭建的Ldap 或者 Windows 的AD服务器作为Web登录认证系统时,就需要这个Django-auth-ldap第三方插件 插件介绍 Django-auth-ldap是一个Django身份...
- `AUTHENTICATION_BACKENDS`配置了认证后端,`django_auth_ldap.backend.LDAPBackend`优先于`ModelBackend`,意味着如果LDAP认证失败,Django才会尝试使用内置的数据库认证。 如果你需要在多个OU下搜索用户,可以...
在更复杂的环境中,比如使用Django框架构建Web应用时,可以创建自定义的认证后端(Backend)来实现LDAP认证。以下是一个简单的LDAP认证后端示例: ```python import ldap class LDAPBackend(object): def ...
在部署和使用这个 CAS 服务器时,你需要配置 Django 项目以包含这个服务器,并根据你的 LDAP 环境调整 `CAS_SQL_PASSWORD_CHECK`。此外,理解 Django 框架、CAS 协议以及 LDAP 工作原理对于正确设置和维护这个服务器...
getsentry-ldap-auth, 将LDAP服务器添加为authention源的岗哨扩展 sentry-ldap-auth一个用于岗哨的Django 自定义认证后端。 这个模块扩展了 django-auth-ldap插件的功能,具有特定的。特性这里后端创建的用户是受管...
在实际开发中,开发者可以根据业务需求,利用`python-ldap`提供的功能来实现特定的逻辑,例如用户认证、权限控制等。同时,这个库也支持与其他Python库集成,如Flask、Django等Web框架,以实现更复杂的系统功能。 ...
为了解决这样的问题,Django认证系统能让您以插件方式与其他认证资源进行交互。 您可以覆盖Diango默认的基于数据库的模式,您还可以使用默认的系统与其他系统进行交互。 指定认证后台 在后台,Django维护了一个用于...
在实际使用中,csh_ldap库的使用流程通常包括以下几个步骤: 1. 连接LDAP服务器:通过指定服务器地址、端口、认证方式(匿名或基于DN和密码)建立连接。 2. 搜索目录:利用提供的搜索过滤器,获取满足条件的条目,...
在Django项目中集成JSON Web Token (JWT) 可以为用户提供无状态的身份验证,而无需使用传统的会话管理。JWT是一种轻量级的身份验证机制,适用于前后端分离的应用。以下是如何在Django项目中使用JWT的详细步骤: 1. ...
1. **LDAP连接**:库提供了连接到LDAP服务器的能力,支持多种认证方式,如简单绑定、SASL(Simple Authentication and Security Layer)等。 2. **用户身份验证**:通过查询LDAP目录,库可以验证用户的用户名和密码...