关于Django项目接入LDAP用户认证

#简介 如下内容主要介绍关于Django系统的后台admin管理页面中如何采用LDAP用户认证,并实现登录的办法django

#用户认证接入前提ui

  1. 关于Django接入LDAP。首先,你得有一个LDAP系统(http://eric_ldap.oschina.com)。
  2. 在LDAP系统中建立对应的登录用户,并设置登录密码
  3. 在LDAP系统中建立对应的登录用户组(eric_admin),把须要登录的帐号加入到组里面

#Django配置 编辑系统配置文件(setting),直接添加在配置最后便可code

import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType, GroupOfUniqueNamesType
# Baseline configuration.

AUTH_LDAP_START_TLS
AUTH_LDAP_SERVER_URI = "ldap://eric_ldap.oschina.com:389"  #配置ldap的服务地址

# 指定使用ldap做为认证系统
AUTH_LDAP_BIND_DN = "uid=admin,cn=users,cn=accounts,dc=oschina,dc=com"
AUTH_LDAP_BIND_PASSWORD = "123qwe"

# ldap的用户搜索的路径,能够使用LDAP的客户端查看用户的搜索路径
# 我这边使用的ldapBorwser查看的ldap帐号结构和信息
AUTH_LDAP_USER_SEARCH = LDAPSearch("cn=users,cn=accounts,dc=oschina,dc=com",
    ldap.SCOPE_SUBTREE, "(uid=%(user)s)")

# ldap用户组的搜索路径
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("cn=groups,cn=accounts,dc=oschina,dc=com",
    ldap.SCOPE_SUBTREE, "(objectClass=groupOfNames)"
)

AUTH_LDAP_GROUP_TYPE = GroupOfNamesType(name_attr="cn")

# ldap中对于的用户属性同步到django用户帐号的属性对应列
AUTH_LDAP_USER_ATTR_MAP = {  
    "first_name": "givenName",
    "last_name": "sn",
    "email": "mail"
} 

AUTH_LDAP_USER_FLAGS_BY_GROUP = {
#定义用户能够登陆admin后台的组是哪一个,前面ldap中已经建立了这个组,并加入了指定用户
# 默认建立的django用户是不能登陆admin后台的
    "is_staff": "cn=eric_admin,cn=groups,cn=accounts,dc=oschina,dc=com", 
#定义用户能够彻底操做admin后台的组是哪一个,前面ldap中已经建立了这个组,并加入了指定用户
    "is_superuser": "cn=eric_admin,cn=groups,cn=accounts,dc=oschina,dc=com" 
}

# 同步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',
)

#效果 无需其余操做,重启django系统,而后使用ldap的用户登录便可。get

若是django自己无此用户,能够经过ldap帐号正常登录,并权限赋予成功,就OK了同步

相关文章
相关标签/搜索