LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,LDAP标准实际上是在X.500标准基础上产生的一个简化版本
AD是Active Directory的缩写,AD应该是LDAP的一个应用实例,而不应该是LDAP本身。比如:windows域控的用户、权限管理应该是微软公司使用LDAP存储了一些数据来解决域控这个具体问题,
只是AD顺便还提供了用户接口,也可以利用Active Directory当做LDAP服务器存放一些自己的东西而已。比如LDAP是关系型数据库,微软自己在库中建立了几个表,每个表都定义好了字段。显然这些表和字段都是根据微软自己的需求定制的,而不是LDAP协议的规定。然后微软将LDAP做了一些封装接口,用户可以利用这些接口写程序操作LDAP,使得Active Directory也成了一个LDAP服务器。
总之:Active Directory = LDAP服务器+LDAP应用(Windows域控)。Active Directory先实现一个LDAP服务器,然后自己先用这个LDAP服务器实现了自己的一个具体应用(域控)
厂商
产品
介绍
SUN
SUNONE Directory Server
基于文本数据库的存储,速度快 。
IBM
IBM Directory Server
基于DB2 的的数据库,速度一般。
Novell
Novell Directory Server
基于文本数据库的存储,速度快, 不常用到。
Microsoft
Microsoft Active Directory
基于WINDOWS系统用户,对大数据量处理速度一般,但维护容易,生态圈大,管理相对简单。
Opensource
Opensource
OpenLDAP 开源的项目,速度很快,但是非主 流应用。
Openldap 整合windows AD认证
Openldap是开源的目录服务实现,windows AD是微软的目录服务现实。现状是有的场景(应用、客户端)跟openldap结合比较容易,有的场景又是必须要用AD,所以几乎不可能弃用其中的任意一种。但同时维护两套系统意味着维护工作大量增加(不仅仅只是增加一倍,要考虑信息分别维护、同步etc等)、出错几率增加。
其中的一种较成熟、使用比较多的解决方案是:openldap使用windows AD的认证,这样只需要在AD上维护一套用户密码即可。
流程图
如图,相关组件分四大部分:
1.LDAP client ;这个是实际调用ldap服务的系统,也可以是类似ldapsearch之类的client 程序
2.Openldap;开源服务端,实际进程为slapd
3.Saslauthd;简单认证服务层的守护进程,该进程要安装在openldap服务器上
4.Active directory;即windows AD
Spring Security LDAP简介
Maven Dependency
首先,让我们看看我们需要的maven依赖项:
<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-ldap</artifactId></dependency><dependency> <groupId>org.apache.directory.server</groupId> <artifactId>apacheds-server-jndi</artifactId> <version>1.5.5</version></dependency>
1.
Java Configuration
接下来,我们来讨论我们的Spring Security Java配置:
public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.ldapAuthentication() .userSearchBase("ou=people") .userSearchFilter("(uid={0})") .groupSearchBase("ou=groups") .groupSearchFilter("member={0}") .contextSource() .root("dc=baeldung,dc=com") .ldif("classpath:users.ldif"); }}
1.
需要注意的是userSearchFilter("(uid={0})")对应的uid每个ldap产品不一样,微软adldap对应的是SamAccountName={0}。
XML Configuration
现在,我们来看看相应的XML配置:
<authentication-manager> <ldap-authentication-provider user-search-base="ou=people" user-search-filter="(uid={0})" group-search-base="ou=groups" group-search-filter="(member={0})"> </ldap-authentication-provider></authentication-manager> <ldap-server root="dc=baeldung,dc=com" ldif="users.ldif"/>
1.
LDAP数据交换格式
LDAP数据可以使用LDAP数据交换格式(LDIF)表示 - 这是我们的用户数据的示例:
dn: ou=groups,dc=baeldung,dc=comobjectclass: topobjectclass: organizationalUnitou: groups dn: ou=people,dc=baeldung,dc=comobjectclass: topobjectclass: organizationalUnitou: peo
-----------------------------------
©著作权归作者所有:来自51CTO博客作者davidwang456的原创作品,请联系作者获取转载授权,否则将追究法律责任
AD和LDAP的区别
https://blog.51cto.com/davidwang456/3085212