- 基于LDAP的身份验证
当Spring Security被配置为接受用户名/密码进行身份验证时,Spring Security将使用基于LDAP的身份验证 。但是,尽管利用用户名/密码进行身份验证,但它并没有使用UserDetailsService集成,因为在绑定身份验证中,LDAP服务器没有返回密码,因此应用程序不能执行密码验证 。
对于如何配置LDAP服务器,有许多不同的场景,因此Spring Security的LDAP提供者是完全可配置的 。它使用单独的策略接口进行身份验证和角色检索,并提供可以配置为处理各种情况的缺省实现 。
先决条件
在尝试将LDAP与Spring Security一起使用之前,您应该熟悉LDAP 。下面的链接很好地介绍了相关的概念,并提供了使用免费LDAP服务器OpenLDAP设置目录的指南
:https://www.zytrax.com/books/ldap/ 。熟悉一些用于从Java访问LDAP的JNDI api可能也很有用 。我们在LDAP提供程序中没有使用任何第三方LDAP库(Mozilla、JLDAP等),但是Spring LDAP得到了广泛的使用,所以如果您计划添加自己的自定义,对该项目有所了解可能会有所帮助 。
在使用LDAP身份验证时,一定要确保正确配置LDAP连接池 。如果您不熟悉如何做到这一点,可以参考Java LDAP文档(
https://docs.oracle.com/javase/jndi/tutorial/ldap/connect/config.html) 。
设置嵌入式LDAP服务器
您需要做的第一件事是确保有一个LDAP Server来指向您的配置 。为简单起见,最好从嵌入式LDAP Server开始 。Spring Security支持使用以下任意一种:
- 嵌入式UnboundID服务器
- 嵌入式ApacheDS服务器
users.ldif的内容
dn: ou=groups,dc=springframework,dc=orgobjectclass: topobjectclass: organizationalUnitou: groupsdn: ou=people,dc=springframework,dc=orgobjectclass: topobjectclass: organizationalUnitou: peopledn: uid=admin,ou=people,dc=springframework,dc=orgobjectclass: topobjectclass: personobjectclass: organizationalPersonobjectclass: .NETOrgPersoncn: Rod Johnsonsn: Johnsonuid: adminuserPassword: passworddn: uid=user,ou=people,dc=springframework,dc=orgobjectclass: topobjectclass: personobjectclass: organizationalPersonobjectclass: inetOrgPersoncn: Dianne Emusn: Emuuid: useruserPassword: passworddn: cn=user,ou=groups,dc=springframework,dc=orgobjectclass: topobjectclass: groupOfNamescn: useruniqueMember: uid=admin,ou=people,dc=springframework,dc=orguniqueMember: uid=user,ou=people,dc=springframework,dc=orgdn: cn=admin,ou=groups,dc=springframework,dc=orgobjectclass: topobjectclass: groupOfNamescn: adminuniqueMember: uid=admin,ou=people,dc=springframework,dc=org
嵌入式UnboundID服务器如果你想使用UnboundID,请指定以下依赖项:
UnboundID依赖项Maven:
<dependency><groupId>com.unboundid</groupId><artifactId>unboundid-ldapsdk</artifactId><version>4.0.14</version><scope>runtime</scope></dependency>
然后可以配置嵌入式LDAP服务器示例:嵌入式LDAP服务器配置
@BeanUnboundIdContainer ldapContainer() {return new UnboundIdContainer("dc=springframework,dc=org","classpath:users.ldif");}
嵌入式ApacheDS服务器Spring Security使用不再维护的ApacheDS 1.x 。不幸的是ApacheDS 2.x只发布了里程碑版本,没有稳定的版本 。一旦ApacheDS 2.x稳定版本发布了,我们会考虑更新 。
如果你想使用Apache DS,那么指定以下依赖项:
ApacheDS的Maven依赖项:
<dependency><groupId>org.apache.directory.server</groupId><artifactId>apacheds-core</artifactId><version>1.5.5</version><scope>runtime</scope></dependency><dependency><groupId>org.apache.directory.server</groupId><artifactId>apacheds-server-jndi</artifactId><version>1.5.5</version><scope>runtime</scope></dependency>
然后可以配置嵌入式LDAP服务器:示例:嵌入式LDAP服务器配置
@BeanApacheDSContainer ldapContainer() {return new ApacheDSContainer("dc=springframework,dc=org","classpath:users.ldif");}
LDAP ContextSource一旦LDAP服务器指向您的配置,您需要将Spring Security配置为指向应该用于对用户进行身份验证的LDAP服务器 。这是通过创建LDAP ContextSource来完成的,它相当于JDBC数据源 。
示例:LDAP Context Source
ContextSource contextSource(UnboundIdContainer container) {return new DefaultSpringSecurityContextSource("ldap://localhost:53389/dc=springframework,dc=org");}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 严国华|《罚罪》唐绍文身份曝光,他确实是卧底,但并非听命于严国华
- 肖振邦|《罚罪》仅剩6集!肖振邦的结局注定悲惨,邱涛的真实身份即将暴露
- 浙江卫视|前浙江卫视主持人突然晒娃,曾和杨迪传绯闻,圈外丈夫仍身份成谜
- 李伯东|罚罪:李伯东真实身份曝光,与张秋峰联手上演碟中谍
- 章安仁|《流金岁月》,章安仁或许对蒋南孙有一丝喜欢,更爱的是她的身份
- 赵鹏超|《罚罪》最狠毒之人,为钱抛弃所有亲人,“大王”身份实至名归
- |探秘新钓点鱼影都没见到,却意外钩起一螃蟹,得知身份后高兴坏了
- 陆安然|覆流年:5000两买下的冬青身份不简单,陆安然既送了人情又得忠仆
- |40岁韩国男星染毒被逮!身份被网友找到了!
- 吴镇宇|吴镇宇:坐公交被指责不该坐老人座,无奈掏出身份证,引无限感慨