在公司上班,我们经常需要上各种各样的内网系统,都是需要账号登陆,要是每个系统都使用独立的账号系统的话,我们就要记住好多的账号密码,十分不方便。但是单点登陆——LDAP就可以解决这个问题。

LDAP的站点:http://www.python-ldap.org/docs.shtml

LDAP可以说是一个数据储存服务器,里面存放着我们的一些信息(姓名。账号,密码,邮箱等我们可以自定)。总而言之,你就当他是一个数据库,储存着信息。

当我们在开发一个系统的时候,我们可以使用LDAP作为我们的认证模块。

步骤主要有一下几部:

1、连接LDAP服务器

2、发送账号密码进行匹配

3、根据返回结果进行确认


这里说一下python使用LDAP。

首先我们要下载python-ldap模块,该模块是python连接使用ldap的封装的api


连接LDAP服务器

line_to_ldap = ldap.open("127.0.0.1", 1038) 或者是 line_to_ldap  = ldap.initialize("ldap://127.0.0.1:1038")

发送账号密码

line_to_ldap.bind_s(dn,password),dn:uid=***,ou=***,dc=*** 不同的设置dn不同,dn就是一个信息唯一的标志在LDAP中

这个时候不出现异常,说明账号密码正确,你就可以line_to_ladp.umbind_s()解开

大致的步骤就是这样,具体的可以看api的接口


接下来说一下django使用LDAP

其实django有人设计了一个库django-auth-ldap,这个东西可以帮我们在使用django的时候,直接使用LDAP服务,只需要写配置信息

你可以在django的settings里面加上一下代码,这样django的用户系统会自动采用LDAP的一些服务


import ldap
 from django_auth_ldap.config import LDAPSearch,PosixGroupType


 AUTH_LDAP_SERVER_URI = 'ldap://****:10389' #服务器URI
 AUTH_LDAP_BIND_DN = "uid=***,ou=users,dc=***,dc=com"
 AUTH_LDAP_BIND_PASSWORD = "****"


 AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=users,dc=umlife,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)")

 AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=users,dc=umlife,dc=com", ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)")

 AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr="ou")

 AUTH_LDAP_USER_FLAGS_BY_GROUP = {
 "is_staff": "ou=users,dc=***,dc=com",
 "is_active": "ou=users,dc=***,dc=com",
 "is_superuser": "ou=users,dc=umlife,dc=com", #验证 Django 的 User 的is_staff,is_active,is_superuser
 }
 AUTH_LDAP_USER_ATTR_MAP = { #把LDAP中用户条目的属性 映射到 Django 的User
 "username":"uid",
 "password":"userPassword",
 "first_name": "displayName",
 "email":"mail",
 }
 AUTH_LDAP_MIRROR_GROUPS=True #注意 此为重点:当这个值为 True, LDAP的用户条目映射并创建 Django User 的时候,会自动映创建Group
 AUTH_LDAP_ALWAYS_UPDATE_USER = True #是否每次都从LDAP 把用户信息 更新到 Django 的User
 AUTH_LDAP_FIND_GROUP_PERMS = True #如果为True, LDAPBackend将提供基于LDAP组身份验证的用户属于的组的权限
 AUTH_LDAP_CACHE_GROUPS = True #如果为True,LDAP组成员将使用Django的缓存框架。
 AUTH_LDAP_GROUP_CACHE_TIMEOUT = 1800 #缓存时长


 AUTHENTICATION_BACKENDS=( #设置使用 LDAPBackend
 "django_auth_ldap.backend.LDAPBackend",
 "django.contrib.auth.backends.ModelBackend",
 )

第一次写博文,没经验,写下来,自己看了也发现有些描述不清楚,慢慢努力,慢慢加油……