首页 > 代码库 > 关于单点登陆--LDAP
关于单点登陆--LDAP
在公司上班,我们经常需要上各种各样的内网系统,都是需要账号登陆,要是每个系统都使用独立的账号系统的话,我们就要记住好多的账号密码,十分不方便。但是单点登陆——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",
)
第一次写博文,没经验,写下来,自己看了也发现有些描述不清楚,慢慢努力,慢慢加油……
关于单点登陆--LDAP