`
peterwanghao
  • 浏览: 128519 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于LDAP进行验证-方法和问题

 
阅读更多

原文 http://apps.hi.baidu.com/share/detail/50011933

随着LDAP的发展和趋于成熟,基于LDAP的应用也越来越广泛,这些应用往往都离不开身份验证。这里就来说一下基于LDAP的目录服务进行验证。
和利用数据库进行验证类似,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的 “两次绑定” 验证流程
为什么基于LDAP进行验证需要“两次”绑定呢,为什么不能取出password然后和输入进行比较呢,试想一下,如果需要读出密码,服务器上的密码存储 要么就不加密,直接可以读出,要么客户就需要知道服务器使用的加密方式,这是不安全,也是不好的,服务器不希望加密方式让客户端知道,客户端也不需要知道 这么多。而从实际来看,LDAP服务器对于password属性默认都是不可读的,甚至有的服务器根本就不支持password属性可读,遇到这种情况, 也就没有办法取得密码了。
还有一个问题就是,为什么我们需要第一次绑定?为什么不直接使用DN呢,首先就是关于这个DN,对于一般的客户端程序,其并不知道具体的DN是什么。再者 让用户输入DN,给用户带来不便的同时,验证也带来问题,因为如果输入的是个目录树而不是所期望的DN,在进行绑定时有可能会让服务器产生不可预料的错 误。
从上面看来,基于LDAP进行身份验证,最好也是最通用的方法就是 “两次绑定”。

分享到:
评论

相关推荐

    python_ldap-3.4.4-cp312-cp312-win_amd64.whl.zip

    综上所述,`python_ldap-3.4.4-cp312-cp312-win_amd64.whl`文件是为Python 3.12在64位Windows系统上设计的Python LDAP库的预编译版本,方便开发人员快速集成和管理基于LDAP的服务。配合`使用说明.txt`,开发者可以...

    python_ldap-3.4.4-cp39-cp39-win32.whl.zip

    - 实现认证和授权机制,如基于LDAP的身份验证。 - 处理LDAP的复杂操作,如过滤器构造、属性操作等。 在实际应用中,Python LDAP库常被用于企业级的用户管理和权限控制,尤其是在那些使用LDAP作为身份验证和用户信息...

    python_ldap-3.1.0-cp36-wheel.zip

    总的来说,Python LDAP库是Python开发者在处理与LDAP服务器交互任务时的强大工具,它简化了目录服务的编程,提高了开发效率,并且能广泛应用于身份验证、权限管理和数据管理等场景。通过正确使用和理解这个库,...

    python_ldap-3.4.4-cp37-cp37m-win32.whl.zip

    Python LDAP库是一个用于Python的轻量级目录访问协议(LDAP)接口,它允许开发者与LDAP服务器进行交互,例如进行用户身份验证、数据检索或管理目录服务。`python_ldap-3.4.4-cp37-cp37m-win32.whl` 是这个库的一个...

    LdapAdmin---LDAP工具

    **LDAP(轻量级目录访问协议)是一种用于访问和管理分布式目录服务的协议,广泛应用于组织内部的身份验证、用户及资源管理。LdapAdmin是一款专为Windows操作系统设计的高效、稳定的LDAP管理工具,它允许管理员便捷地...

    LDAP实现AD域账号验证 - Java/SpringBoot

    通过Spring Security框架,我们可以轻松地实现基于LDAP的身份验证和授权。首先,在SpringBoot项目中引入`spring-boot-starter-security`和`spring-ldap-core`依赖。接着,配置`application.properties`或`...

    Laravel开发-ldap-auth-driver

    在Laravel框架中,开发 LDAP (Lightweight Directory Access Protocol) 身份验证驱动是一个重要的功能扩展,特别是对于大型企业或组织,它们通常依赖于中央LDAP服务器进行用户管理和身份验证。`ldap-auth-driver` 是...

    apache-ldap-api-1.0.0-M13-bin

    这个JAR文件包含了所有必要的类和方法,使得开发者可以直接在Java代码中调用 LDAP 功能,而无需深入了解LDAP协议的底层细节。通过使用此库,开发人员可以高效地与LDAP目录服务进行同步,例如Active Directory或...

    Laravel开发-adldap2-laravel

    当 LDAP 验证失败时,`adldap2-laravel` 提供了错误处理机制,可以捕获并记录错误信息,帮助开发者快速定位问题。同时,通过 Laravel 的日志系统,可以记录 LDAP 相关的日志,便于调试和维护。 总的来说,`adldap2-...

    连接Ldap小工具-ldapbrowser,非常的实用

    4. **开发调试**:对于开发基于LDAP的应用程序,Ldapbrowser是测试和调试的好帮手。 ### 总结 Ldapbrowser作为一款强大的LDAP客户端工具,其简洁的界面和丰富的功能使目录服务管理变得更加便捷。无论是新手还是经验...

    python_ldap-3.4.4-cp310-cp310-win_amd64.whl.zip

    - 搜索:使用`ldap.search_s`进行基于过滤器的搜索,可以获取目录树中的特定信息。 - 添加、修改和删除条目:`ldap.add_s`、`ldap.modify_s`和`ldap.delete_s`分别用于这些操作。 - 处理结果集:通过迭代返回的结果...

    PyPI 官网下载 | flask-ldap-login-0.3.0.tar.gz

    Flask LDAP Login是专门为Flask框架设计的一个扩展,用于集成企业级的身份验证系统,特别是那些基于LDAP的服务。通过这个扩展,开发者可以轻松地将用户登录和授权功能与公司的LDAP服务器连接起来,这样用户就可以...

    Go-使用Golang编写基于LDAP的Web应用程序

    2. 绑定:使用`conn.Bind`方法进行身份验证,通常需要提供DN(Distinguished Name)和密码。 3. 搜索:通过`conn.Search`执行查询操作,定义过滤器和搜索范围来获取所需数据。 4. 处理结果:遍历搜索结果,对每个...

    Python库 | oath-ldap-tool-1.3.0.tar.gz

    - 用户身份验证和授权:在基于LDAP的身份管理系统中,用于验证用户凭据并确定权限。 - 数据同步:与数据库或其他系统同步用户信息。 - 配置管理:在大型企业环境中,管理网络设备、软件配置等。 - 日志和审计:记录...

    java连接和验证ldap文档

    其中,Java 6.0 API for LDAP 是一个基于 Java 的 LDAP 访问 API,提供了多种类和方法来连接和访问 LDAP 服务器。 在 Java 6.0 API for LDAP 中,javax.naming.directory 包提供了多种类和方法来连接和访问 LDAP ...

    Python库 | flask_python_ldap-0.1.0-py3-none-any.whl

    `flask_python_ldap-0.1.0-py3-none-any.whl` 是一个针对Python的库,专为Flask框架设计,用于集成LDAP(轻量级目录访问协议)...通过这个库,你可以构建安全的、基于LDAP的Web应用,为用户管理和授权提供强大支持。

    ldap的离线安装包及安装方法

    最后,你需要配置你的应用(如 Samba、Apache HTTPD、Postfix 等)以使用 LDAP 进行身份验证和授权。 离线安装 LDAP 虽然步骤相对繁琐,但在特定环境下却是必要的。理解每个步骤的目的和作用,有助于你更好地管理...

    LDAP安装说明-配合博客使用

    LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)是一种基于TCP/IP的应用层协议,用于访问和管理分布式目录服务。它最初是作为X.500目录服务的一种简单版本而开发的。LDAP的设计目的是为了提供一种...

    spring boot集成ldap

    这样,你就成功地在Spring Boot项目中集成了LDAP服务,实现了基于LDAP的身份管理和数据操作。 总之,Spring Boot集成LDAP使得开发人员能够方便地在Java应用中利用LDAP服务进行用户管理,提供了一种高效、标准的方式...

Global site tag (gtag.js) - Google Analytics