http://blog.csdn.net/xufaxi/article/details/5703516
和利用数据库进行验证类似,LDAP中也是利用登陆名和密码进行验证,LDAP中会定义一个属性password,用来存放用户密码,而登陆名使用较多的都是mail地址。那怎么样才能正确的用LDAP进行身份验证呢,下面是一个正确而又通用的步骤:
1. 从客户端得到登陆名和密码。注意这里的登陆名和密码一开始并没有被用到。
2. 先匿名绑定到LDAP服务器,如果LDAP服务器没有启用匿名绑定,一般会提供一个默认的用户,用这个用户进行绑定即可。
3. 之前输入的登陆名在这里就有用了,当上一步绑定成功以后,需要执行一个搜索,而filter就是用登陆名来构造,形如:"(|(uid=$login)(mail=$login))" ,这里的login就是登陆名。搜索执行完毕后,需要对结果进行判断,如果只返回一个entry,这个就是包含了该用户信息的entry,可以得到该entry的DN,后面使用。如果返回不止一个或者没有返回,说明用户名输入有误,应该退出验证并返回错误信息。
4. 如果能进行到这一步,说明用相应的用户,而上一步执行时得到了用户信息所在的entry的DN,这里就需要用这个DN和第一步中得到的password重新绑定LDAP服务器。
5. 执行完上一步,验证的主要过程就结束了,如果能成功绑定,那么就说明验证成功,如果不行,则应该返回密码错误的信息。
这5大步就是基于LDAP的一个“两次绑定”验证方法。
为什么基于LDAP进行验证需要“两次”绑定呢,为什么不能取出password然后和输入进行比较呢,试想一下,如果需要读出密码,服务器上的密码存储要么就不加密,直接可以读出,要么客户就需要知道服务器使用的加密方式,这是不安全,也是不好的,服务器不希望加密方式让客户端知道,客户端也不需要知道这么多。而从实际来看,LDAP服务器对于password属性默认都是不可读的,甚至有的服务器根本就不支持password属性可读,遇到这种情况,也就没有办法取得密码了。
还有一个问题就是,为什么我们需要第一次绑定?为什么不直接使用DN呢,首先就是关于这个DN,对于一般的客户端程序,其并不知道具体的DN是什么。再者让用户输入DN,给用户带来不便的同时,验证也带来问题,因为如果输入的是个目录树而不是所期望的DN,在进行绑定时有可能会让服务器产生不可预料的错误。
从上面看来,基于LDAP进行身份验证,最好也是最通用的方法就是“两次绑定”。
所谓的bind是一个authentication的过程,不要把它想像成“绑定”,既然是认证,就需要一个用户名和密码,openldap中如果出示的用户名和密码错误,服务器会尝试匿名认证,就和匿名ftp一样。当然,在现实配置中可能需要 在认证不获得成功就不能做查询操作,这些是在slapd.conf文件中通过设置ACL实现的。
认证所用的用户名和密码为目录树中某个节点的两个属性(用户名和密码),一般情况下,程序会默认使用uid和userPassword属性。写程序进行认证的时候只要提供这个节点的两个属性就可以了。
相关推荐
JAVA中使用LDAP进行用户认证是指在JAVA应用程序中使用轻量级目录访问协议(LDAP)来进行用户身份验证。LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行定制。LDAP支持TCP/IP协议,使...
而LDAP(Lightweight Directory Access Protocol)则是一种用于存储和检索分布式目录信息的标准协议,常用于用户身份验证和权限管理。本文将详细介绍如何在Spring Boot项目中集成LDAP,以及涉及的主要API和配置步骤...
Java操作LDAP( Lightweight Directory Access Protocol)在SpringBoot工程中的实现主要涉及到的是企业级的身份验证与目录服务。LDAP是一种开放的标准协议,广泛用于存储用户账户、组信息和其他元数据。在这个项目中...
在IT领域,LDAP常用于企业内部的身份验证、权限管理以及信息共享。 ### LDAP目录服务基础 1. **目录服务结构**:LDAP目录结构基于Distinguished Name (DN),每个条目都有唯一的DN,例如`cn=张三,ou=员工,dc=example...
LDAP目录通常包含用户账号、密码、电子邮件地址、组织结构等数据,广泛应用于身份验证、权限管理和信息共享。 【通用LDAP服务器搭建】 搭建通用LDAP服务器通常涉及以下几个步骤: 1. **OpenLDAP工具简介**:...
4. **配置客户端访问**:在需要使用LDAP进行身份验证和授权的系统上配置LDAP客户端,包括DNS解析、基DN(Base DN)指定、连接方式(如匿名、简单或安全认证)等。 5. **监控与管理**:利用LDAP服务器提供的管理工具...
Liferay与LDAP集成是将Liferay门户与目录服务相结合,实现单点登录、用户身份验证和用户数据同步等功能,提升企业级应用的安全性和用户体验。 OpenLDAP是LDAP协议的开源实现,包括slapd(LDAP服务守护进程)、...
- 在客户端配置时,需要确保信任的证书库中包含LDAP服务器的证书,这样客户端才能验证服务器身份,建立信任关系。 - 如果客户端或服务器软件版本不支持TLS/SSL,则需要升级到支持的版本。 在操作过程中,确保遵循...
它提供了灵活的结构和易于扩展的特性,使其在各种场景下都具有广泛的应用,例如企业内部的身份验证、邮件系统的用户目录以及网络设备的配置管理等。通过深入理解和熟练运用 LDAP,可以有效地组织和检索大量数据,...
它包含了从控制台或命令行进行配置的所有必要步骤,适合各种不同技术水平的管理员。 #### Sun ONE Directory Server 简介 Sun ONE Directory Server 是一款用于存储和管理组织数据的高性能目录服务解决方案。它...
- 用户身份验证:LDAP可作为集中式认证机制,用户可以通过一个单一的身份验证访问多个系统。 - 数据存储:它能够存储用户账户、组信息、配置信息等,便于管理。 - 权限控制:通过访问控制指令,可以定义不同用户...
**场景描述**: 假设存在两个应用系统A和B,其中A使用LDAP目录服务进行身份认证,而B则使用数据库进行身份验证。当用户通过A应用完成LDAP认证后,会收到认证服务返回的身份令牌。该令牌可以在A应用中用于漫游至B应用...
此外,还可以集成LDAP服务器或Active Directory服务进行企业级的身份验证。 2. 授权:授权模块决定已认证的用户可以访问哪些资源。Java提供访问控制列表(ACL)和角色基础的访问控制(RBAC)等机制。通过Spring ...
- **LDAP V3**: 在V2的基础上增加了更多的扩展性和安全性功能,如扩展操作、增强的身份验证机制等。 - **1.6 SLAPD的介绍和作用** - **SLAPD**: 是OpenLDAP的核心组件,负责处理LDAP协议的所有方面,包括认证、...
Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。CAS 服务器充当着身份验证服务器的角色,负责验证用户的身份,生成 ...
它支持树形结构的数据组织,常用于企业内部的身份验证、权限管理和用户信息管理。LDAP服务器通常存储用户账户、组信息、公司结构等数据,以便快速查询和访问。 **Frood LDAP Browser特性** 1. **多协议支持**:...
此毕业设计论文详细探讨了两个关键的安全模块:数据加密和身份验证。这两个模块是现代软件系统中保障信息安全的重要组成部分。 首先,数据加密模块是保护敏感信息不被未经授权的用户访问的基础。Java提供了丰富的...
- **特定身份验证服务配置**: 详述如何配置企业级身份验证服务,如 Azure AD、LDAP 等。 ### 22. 设置 LDAP 身份验证 - **LDAP 配置**: 包括设置、日志记录和机构团队映射。 ### 23. 更改身份验证的默认超时 - **...
在IT领域,LDAP数据库常用于身份验证、授权和配置管理。** **在Go语言环境下开发与LDAP相关的应用程序,可以利用Go的标准库`golang.org/x/net/ldap`,该库提供了丰富的API来执行LDAP操作,如连接、搜索、添加、删除...