
根据你说的应该是用户的问题,当时我用PHP连接LDAP的时候就是因为用户的问题,会出错,但是我具体忘了出错的提示信息。后来改了用户之后就能bind上用户了,配置这块我先看看我以前的日志,如果是你配置的问题,我会及时QQ联系你的601你的ldap_connect()函数能够连接上我感觉应该不是环境的问题k先试试吧
使用环境:
python 27
django 13
python-ldap-243
django-auth-ldap-1012
settingspy:
import ldap
from django_auth_ldapconfig import LDAPSearch,PosixGroupType
AUTH_LDAP_SERVER_URI = 'ldap://:389' #服务器URI
AUTH_LDAP_BIND_DN = "cn=admin,dc=qfei,dc=com"
AUTH_LDAP_BIND_PASSWORD = "123456"
AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=staff,dc=qfei,dc=com", #查询用户
ldapSCOPE_SUBTREE, "(uid=%(user)s)")
AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=staff,dc=qfei,dc=com", #查找组
ldapSCOPE_SUBTREE, "(objectClass=posixGroup)"
)
AUTH_LDAP_GROUP_TYPE = PosixGroupType(name_attr="cn")
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_staff": "cn=tech,ou=Tech,ou=Staff,dc=qfei,dc=com",
"is_active": "cn=tech,ou=Tech,ou=Staff,dc=qfei,dc=com",
"is_superuser": "cn=tech,ou=Tech,ou=Staff,dc=qfei,dc=com", #验证 Django 的 User 的is_staff,is_active,is_superuser
}
AUTH_LDAP_USER_ATTR_MAP = { #把LDAP中用户条目的属性 映射到 Django 的User
"username":"uid",
"password":"userPassword",
"first_name": "givenName",
"last_name": "sn",
"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_ldapbackendLDAPBackend",
"djangocontribauthbackendsModelBackend",
)
注:
1,需要创建 django 的 User Group 表
2,当LDAP条目 同步至 django User,Group 后,同关系型数据库一样 *** 作 数据即可
不足:暂时 未实现 django 表 至LDAP 的数据双向同步
LDAP目录服务器是基于客户/服务器模式的。一个或者多个LDAP服务器包含着组成整个目录信息树(DIT)的数据。客户连接到服务器并且并发一个请求(request)。然后服务器要么以一个回答(answer)予以回应,要么给出一个指针,客户可以通过此指针获取到所需的数据(通常,该指针是指向另一个LDAP服务器)。无论客户连到哪个LDAP服务器,它看到的都是同一个目录视图(view)。这是LDAP这类全局目录服务的一个重要特征。
条目和属性的关系:
LDAP的信息模型是基于条目的(entry)。一个条目就是一些具有全局唯一的标识名(Distinguished Name,简写做DN)的属性的集合。DN用于无二义性的纸袋一个唯一的条目。条目的每一个属性都有一个类型(type),一个或者多个值(value)。类型往往是特定字符串的简写,比如用“cn”指代“common name”,或是"mail"指代电子邮件地址。值(value)的语法依赖于类型(type)。比如,类型为cn的属性可能包含值"候剑豪"。类型为mail的属性可能包含值“ frederick_hou@163com ”。类型为jpeg Photo的属性可能包含二进制格式的JPEG图像。
在LDAP中,条目是按树状的层次结构组织的。传统上,这个机构旺旺是代理界限或组织界限的反应。代表国家的条目位与整个目录树的顶层。之下的条目则代表各个州以及国家性的组织。在下面的条目则代表着组织单位,个人,打印机,文件,或者你所能想到的其他的东西。目录是也可以按照因特网域名组织结构,因为它允许按照DNS对目录服务进行定时,这种命名方式正变得越来越受欢迎。下图是按照域名进行组织的一个LADP目录树,相比传统的命名方式更加让用户易于接受。另外,LDAP允许你通过使用一种叫做objectClass的特殊属性来控制哪些属性是条目所必须的,哪些属性是条目可选的。objectClass属性的值是由条目所必须遵守的方案(schema)来定义的。
一个条目是通过它的标识名来引用的。而标识名(Relative DistinguishedName 或者RDN)是由标识名和它的父条目名连在一起构成的。
LDAP定义了一个查询和更新目录的 *** 作,支持的 *** 作包括从目录中添加和删除条目,更改已有的条目,更改已有的的名字。然而,大多数情况下LDAP是用于搜索目录中的信息的。通过指定搜索过滤器,LDAP可以在目录的相关部分搜索想相符的条目。满足过滤条件的每一个条目都能收到请求消息。
一些目录服务不提供保护,允许信息对任何人可见。LDAP提供了一套机制来对客户进行身份确认,或者让客户证明他拥有连接到服务器的身份,这无疑为对服务器进行全方位的访问控制铺平了道理,从而确保了服务器上所包含信息的安全。LDAP也支持privacy和integrity的安全服务。
ldapBaseDnPath = "LDAP://localhost/DC=dc3,DC=dc2,DC=dc1"
// 'LDAP' 这4个字母必须大写
userName = "Name1"
password = "DoNotUseMe"
using (DirectoryEntry de = new DirectoryEntry(ldapBaseDnPath, userName, password)) {
try {
object connected = deNativeObject;
// 认证通过
}
catch {
// 认证失败 找原因
}
}
勾选“启用LDAP认证”,由于我配置的用户名就是uid,使用手机号登录。
配置保存后,测试连接,并且测试登录。
比较简单,主要就对LDAP集成完毕。
ldap的用户属性和Metersphere本地用户的属性对应关系:
{"name": "description","email": "mail", "username":"uid"}
DN:Distinguished Name,可以叫做条目区分名。在一个目录中这个名称总是唯一的,也是用来标识一个节点的主要方式。它有若干属性:
1、CN=CommonName 为用户名或服务器名,最长可以到80个字符,可以为中文;
2、OU=OrganizationUnit为组织单元,最多可以有四级,每级最长32个字符,可以为中文;
3、DC= DomainComponent 为目录结构
4、O=Organization为组织名,可选,可以3—64个字符长
5、C=Country为国家名,可选,为2个字符长
一般用户的属性里面有个userpassword属性,里面存储的是密码,你让用户输入的密码和里面存储的密码进行比对,如果一样就验证过了。不过这个属性里面存储的密码一般都经过散列算法运算,你用同样的散列算法把用户输入的密码也运算一下即可。
以上就是关于关于PHP Ldap 账户管理的问题全部的内容,包括:关于PHP Ldap 账户管理的问题、有大拿在Django中用过LDAP来管理用户吗、LDAP(一)之概念原理介绍等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)