原帖地址: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和配置步骤...
在IT领域,LDAP常用于企业内部的身份验证、权限管理以及信息共享。 ### LDAP目录服务基础 1. **目录服务结构**:LDAP目录结构基于Distinguished Name (DN),每个条目都有唯一的DN,例如`cn=张三,ou=员工,dc=example...
Java操作LDAP( Lightweight Directory Access Protocol)在SpringBoot工程中的实现主要涉及到的是企业级的身份验证与目录服务。LDAP是一种开放的标准协议,广泛用于存储用户账户、组信息和其他元数据。在这个项目中...
搭建通用LDAP服务器通常涉及以下几个步骤: 1. **OpenLDAP工具简介**:OpenLDAP是开源的LDAP服务器实现,它提供了一个完整的LDAP目录服务系统,包括服务器软件、客户端工具和开发库。 2. **OpenLDAP工具安装**:...
4. **配置客户端访问**:在需要使用LDAP进行身份验证和授权的系统上配置LDAP客户端,包括DNS解析、基DN(Base DN)指定、连接方式(如匿名、简单或安全认证)等。 5. **监控与管理**:利用LDAP服务器提供的管理工具...
- 用户身份验证:LDAP可作为集中式认证机制,用户可以通过一个单一的身份验证访问多个系统。 - 数据存储:它能够存储用户账户、组信息、配置信息等,便于管理。 - 权限控制:通过访问控制指令,可以定义不同用户...
配置Open LDAP使用TLS通信一般需要以下步骤: 1. 生成SSL证书和私钥:首先需要为LDAP服务器生成一个SSL证书和对应的私钥。这通常需要使用OpenSSL这样的工具来完成。生成的证书可以是自签名的,也可以是从证书颁发...
Liferay与LDAP集成是将Liferay门户与目录服务相结合,实现单点登录、用户身份验证和用户数据同步等功能,提升企业级应用的安全性和用户体验。 OpenLDAP是LDAP协议的开源实现,包括slapd(LDAP服务守护进程)、...
创建 LDAP 数据库的过程可以分为以下步骤: 1. 定义“树根”:这是 LDAP 树的基础,通常通过配置文件(如 `slapd.conf`)来设置,例如 `dc=ourschool,dc=org`。 2. 建立组织结构:创建 OU 来代表系、部门或其他...
它包含了从控制台或命令行进行配置的所有必要步骤,适合各种不同技术水平的管理员。 #### Sun ONE Directory Server 简介 Sun ONE Directory Server 是一款用于存储和管理组织数据的高性能目录服务解决方案。它...
- **特定身份验证服务配置**: 详述如何配置企业级身份验证服务,如 Azure AD、LDAP 等。 ### 22. 设置 LDAP 身份验证 - **LDAP 配置**: 包括设置、日志记录和机构团队映射。 ### 23. 更改身份验证的默认超时 - **...
OpenLDAP是一个开源的轻量级目录访问协议(Lightweight Directory Access Protocol, LDAP)实现,广泛应用于身份验证、授权管理和用户信息存储等场景。本文将详细介绍如何在CentOS操作系统上搭建并管理OpenLDAP...
Yale CAS 是耶鲁大学开发的一种开源的单点登录(SSO)解决方案,提供了一个通用的身份验证框架,允许用户使用单个身份验证来访问多个应用程序。CAS 服务器充当着身份验证服务器的角色,负责验证用户的身份,生成 ...
**场景描述**: 假设存在两个应用系统A和B,其中A使用LDAP目录服务进行身份认证,而B则使用数据库进行身份验证。当用户通过A应用完成LDAP认证后,会收到认证服务返回的身份令牌。该令牌可以在A应用中用于漫游至B应用...
- **LDAP V3**: 在V2的基础上增加了更多的扩展性和安全性功能,如扩展操作、增强的身份验证机制等。 - **1.6 SLAPD的介绍和作用** - **SLAPD**: 是OpenLDAP的核心组件,负责处理LDAP协议的所有方面,包括认证、...
CAS(Central Authentication Service)是基于Java的开源身份验证框架,用于实现单一登录(Single Sign-On, SSO)。在本文中,我们将深入探讨如何将CAS客户端集成到您的应用程序中,实现单点登录功能。 首先,理解...
此外,还可以集成LDAP服务器或Active Directory服务进行企业级的身份验证。 2. 授权:授权模块决定已认证的用户可以访问哪些资源。Java提供访问控制列表(ACL)和角色基础的访问控制(RBAC)等机制。通过Spring ...
它支持树形结构的数据组织,常用于企业内部的身份验证、权限管理和用户信息管理。LDAP服务器通常存储用户账户、组信息、公司结构等数据,以便快速查询和访问。 **Frood LDAP Browser特性** 1. **多协议支持**:...