如何阻止LDAP用户在Django管理后台自动创建
解决Django LDAP认证自动创建用户的问题
快速解决方案:禁用自动创建默认行为
django-auth-ldap默认会在LDAP认证通过后自动在Django用户表中生成对应账号,这是因为AUTH_LDAP_CREATE_USER参数默认值为True。你只需要在settings.py中添加一行配置就能关闭这个功能:
AUTH_LDAP_CREATE_USER = False
添加后,只有已经存在于Django用户列表中的账号,才能通过LDAP认证登录;AD中存在但Django里没有的用户会直接认证失败,不会被自动创建。
进阶控制:仅允许特定AD组用户创建账号(可选)
如果需要更灵活的权限控制——比如只允许AD中特定组的用户自动创建Django账号,其他组用户无法登录,可以自定义LDAP后端:
- 在你的Django应用下创建
backends.py文件,写入以下代码:
from django_auth_ldap.backend import LDAPBackend class RestrictedLDAPBackend(LDAPBackend): def get_or_create_user(self, username, ldap_user): # 定义允许创建账号的AD组DN allowed_group_dns = [ "cn=允许登录组,ou=group,dc=example,dc=com", "cn=管理员组,ou=group,dc=example,dc=com" ] # 检查当前LDAP用户是否属于允许的组 if any(group in ldap_user.group_dns for group in allowed_group_dns): return super().get_or_create_user(username, ldap_user) # 不属于允许组则返回None,认证失败 return None, False
- 修改
settings.py中的认证后端配置,替换为自定义的后端:
AUTHENTICATION_BACKENDS = [ 'your_app_name.backends.RestrictedLDAPBackend', # 替换为你的应用路径 'django.contrib.auth.backends.ModelBackend' ]
注意事项
- 关闭自动创建后,需要手动在Django后台添加需要登录的用户,确保用户名和AD中的
sAMAccountName完全一致。 - 你的配置中
AUTH_LDAP_ALWAYS_UPDATE_USER = True会同步LDAP用户属性到Django账号,这个配置仅对已存在的Django用户生效,关闭自动创建后不会影响该功能。
内容的提问来源于stack exchange,提问作者Ricky Aguilar
相关产品推荐
相关产品推荐

