`
lengyun3566
  • 浏览: 446394 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
D59180b9-02f1-3380-840c-ea34da46143c
《Spring Secur...
浏览量:379033
社区版块
存档分类
最新评论

《Spring Security3》第九章(LDAP)第三部分翻译(LDAP明确配置)

 
阅读更多

 

明确的LDAP bean配置

         在本节中,我们带领你学会明确配置以下两项功能所需要的bean集合,即连接外部的LDAP服务器和支持授权的LdapAuthenticationProvider。正如其它基于bean的配置,你可能不希望这样做,除非你发现security命名空间风格的配置不能支持你的业务或技术需求——在这种情况下,请继续阅读。

配置外部的LDAP服务器引用

         为了实现这个配置,我们假设在本地的10389端口上运行着LDAP服务器,与前面章节的对应<ldap-server>有相同的配置。需要的bean定义在dogstore-base.xml中提供,如下:

 

<bean class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"
 id="ldapServer">
  <constructor-arg value="ldap://localhost:10389/dc=jbcppets,dc=com"/>
  <property name="userDn" value="uid=admin,ou=system"/>
  <property name="password" value="secret"/>
</bean>

 接下来,我们需要配置稍微复杂一些的LdapAuthenticationProvider

 

配置LdapAuthenticationProvider

         如果你已经读过并理解本章中关于Spring Security LDAP如何工作的讲解,那这个bean配置就很容易理解了,尽管稍有些复杂。我们将会配置一个包含如下特性的LdapAuthenticationProvider

l  用户的凭证进行绑定认证(不是密码对比);

l  UserDetailsContextMapper中使用InetOrgPerson

让我们开始吧——首先我们声明LdapAuthenticationProvider

 

<bean class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider" id="ldapAuthProvider">
  <constructor-arg ref="ldapBindAuthenticator"/>
  <constructor-arg ref="ldapAuthoritiesPopulator"/>
  <property name="userDetailsContextMapper" ref="ldapUserDetailsConte
xtMapper"/>
</bean>

 

 接下来是BindAuthenticator以及支持的FilterBasedLdapUserSearch bean(用来在绑定前在LDAP目录中定位用户的DN):

 

<bean class="org.springframework.security.ldap.authentication.BindAuthenticator" id="ldapBindAuthenticator">
  <constructor-arg ref="ldapServer"/>
  <property name="userSearch" ref="ldapSearchBean"/>
</bean>
<bean class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch" 
id="ldapSearchBean">
  <constructor-arg value=""/> <!-- user-search-base -->
  <constructor-arg value="(uid={0})"/> <!-- user-search-filter -->
  <constructor-arg ref="ldapServer"/>
</bean>

 

          最后是LdapAuthoritiesPopulatorUserDetailsContextMapper,它们的角色我们在前文中已经介绍过:

 

<bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"
 id="ldapAuthoritiesPopulator">
  <constructor-arg ref="ldapServer"/>
  <constructor-arg value="ou=Groups"/>
  <property name="groupSearchFilter" value="(uniqueMember={0})"/>
</bean>
<bean class="org.springframework.security.ldap.userdetails.InetOrgPersonContextMapper"
 id="ldapUserDetailsContextMapper"/>

 

        最后需要配置的元素是对我们LdapAuthenticationProvider的引用,我们将会在dogstore-security.xml中通过引用进行声明:

 

<authentication-manager alias="authenticationManager">
  <authentication-provider ref="ldapAuthProvider"/>
</authentication-manager>

 到此时为止,我们已经使用明确Spring bean的方法配置了LDAP认证。正如我们在第六章:高级配置和扩展第一次引入明确bean配置那样,在LDAP集成中使用这项技术能够在security命名空间配置没有暴露特定属性时,或者需要自定义的实现类以满足特定业务场景的地方很有用。接下来,我们将会介绍一个这样的场景即怎样通过LDAP连接到Microsoft Active Directory

 

通过LDAP集成Microsoft Active Directory

         Microsoft Active Directory的一个便利功能是它不仅能够很好的与基于Microsoft Windows网络的结构集成,还能够配置成使用LDAP协议保罗Active Directory内容。如果你们是使用Windows的公司,很可能任何的LDAP集成都是基于你的Active Directory实例。

         取决于你的Microsoft Active Directory配置(以及目录管理员支持Spring Security LDAP的意愿),你可能遇到的困难不在认证和绑定的过程中而是匹配Active Directory中的信息到Spring Security系统中的用户GrantedAuthority上。

         JBCP Pets公司的Active Directory LDAP树的实例在LDAP浏览器中的截图如下:



 在这里你没有看到前面实例LDAP结构中的ou=Groups——这是因为Active Directory在用户条目本身上以属性的方式存储分组信息。内置的Spring Security(本书出版之时)并没有提供支持典型Active Directory LDAP树的LdapAuthoritiesPopulator

         让我们使用刚刚了解到的明确配置bean的方式来织入一个简单的LdapAuthoritiesPopulator实现,它只是简单的为每个LDAP认证的用户授予ROLE_USER角色。我们将这个类称为com.packtpub.springsecurity.security.SimpleRoleGrantingLdapAuthoritiesPopulator

 

public class SimpleRoleGrantingLdapAuthoritiesPopulator implements
    LdapAuthoritiesPopulator {
  protected String role = "ROLE_USER";
  public Collection<GrantedAuthority> getGrantedAuthorities(
      DirContextOperations userData, String username) {
    GrantedAuthority ga = new GrantedAuthorityImpl(role);
    return Arrays.asList(ga); 
  }
  public String getRole() {
    return role;
  }
  public void setRole(String role) {
    this.role = role;
  }
}

 并不十分令人兴奋,但是要记住如果需要的话你可以使用传入的o.s.ldap.core.DirContextOperations对象进行很多类型的LDAP操作,如查询目录获取用户的信息以及使用这些信息填充返回的角色。

         假设我们从上一节中的bean配置开始,让我们看一下怎样修改配置以支持Active Directory结构。

 

  <bean class="org.springframework.security.ldap.
DefaultSpringSecurityContextSource" id="ldapServer">
    <constructor-arg value="ldap://corp.jbcppets.com/dc=corp,dc=jbcppets,dc=com"/>
<property name="userDn" 
value="CN=Administrator,CN=Users,DC=corp,DC=jbcppets,DC=com"/>
    <property name="password" value="admin123!"/>
  </bean>
  <bean class="org.springframework.security.ldap.search.FilterBasedLdapUserSearch"
    id="ldapSearchBean">
<constructor-arg value="CN=Users"/>
<constructor-arg value="(sAMAccountName={0})"/>
<constructor-arg ref="ldapServer"/>
</bean>
<bean class="com.packtpub.springsecurity.security.SimpleRoleGrantingLdapAuthoritiesPopulator" id="ldapAuthoritiesPopulator"/>

 属性sAMAccountName是在Active Directory中与标准LDAP条目的uid属性对等的——其它的配置修改都是典型的Active Directory配置。

         尽管大多数的Active Directory LDAP集成都可能比本例复杂,但这会给你一个深入理解和探索Spring Security LDAP内部原理的起点,会使得支持更复杂的集成会简单一点。

         注意存在另外一种与Active Directory集成的方式——Kerberos认证,它是Spring Security扩展项目的一部分,并会在第十二章:Spring Security扩展中涉及到。你可能会愿意了解两种类型的集成并确定哪种更适合你的需求(我们将会在第十二章中,比较Active DirectoryLDAPKerberos认证)。

委托角色查询给UserDetailsService

         最后一项明确配置bean支持的技术就是在UserDetailsService中根据用户名查找用户并在此处获取GrantedAuthority。配置很简单就像声明一个bean,含有一个对UserDetailsService引用(就像基于JDBC的或我们在前面的章节中用到过的):

 

<bean class="org.springframework.security.ldap.authentication.UserDetailsServiceLdapAuthoritiesPopulator" id="ldapAuthoritiesPopulator">
   <constructor-arg ref="jdbcUserServiceCustom"/>
 </bean>

 你可能会预见到的逻辑和管理问题是用户名和角色必须同时在LDAP中和UserDetailsService所有的存储中管理——在大型用户场景下这可能不是一个灵活的模式。

         这种场景的通常用在需要LDAP认证确保应用中的用户即为公司用户,但是应用本身想存储授权信息。这会导致潜在的应用相关数据在LDAP目录以外,这可能会是出于分开操作的考虑。

小结

         我们已经看到在接受请求时,可以依赖LDAP服务器提供认证和授权信息,以及丰富的用户个人信息。在本章中,我们学到了:

l  LDAP术语和概念,并理解了LDAP 目录怎样组织以支持Spring Security

l  Spring Security配置文件中配置单独的(嵌入式的)和外部的LDAP服务器;

l  基于LDAP存储认证和授权用户,以及随后的匹配Spring Security角色;

l  LDAP中不同的认证模式、密码存储和安全机制——以及在Spring Security中怎样处理;

l  匹配LDAP目录中的用户详细信息到UserDetails对象中,实现LDAP和使用Spring应用的属性交换;

l  LDAP的明确bean配置,以及这种方式的优劣。

 

 

 

  • 大小: 102.9 KB
分享到:
评论

相关推荐

    spring-security-samples-ldap

    spring security 3 ldap验证方式示例

    Spring Security3.2搭建LDAP认证授权

    进阶-使用Spring Security3.2搭建LDAP认证授权和Remember-me

    spring-security-ldap-2.0.1

    spring-security-ldap-2.0.1

    Spring Security ldap 1.3.2

    spring-security-ldap-1.3.2

    springSecurity3中文文档

    第一章:一个不安全应用的剖析 第二章:springsecurity起步 第三章:增强用户体验 第四章:凭证安全存储 ...第九章:LDAP目录服务 第十章:使用中心认证服务 第十一章:客户端证书认证 第十二章:spring Security扩展

    SpringLdapDemo

    学习SpringSecurity时,看到LDAP认证,不了解LDAP根本无从下手。所以转头学习了一下LDAP,搭建了一个DEMO,仅作记录。 LDAP(Lightweight Directory Access Protocol) 轻量级目录访问协议,LDAP目录以树状的层次结构...

    Spring Security

    Spring Security是什么? 历史 发布版本号 Getting Spring Security Spring Security 4.1新特性 Java 配置提升 Web应用程序安全性提升 授权改进 密码模块的改进 测试的改进 一般的改进 样品和指南 (Start Here) Java ...

    spring security 参考手册中文版

    第三部分 测试 97 11.测试方法安全性 97 11.1安全测试设置 98 11.2 @WithMockUser 98 11.3 @WithAnonymousUser 100 11.4 @用户详细信息 101 11.5 @WithSecurityContext 102 11.6测试元注释 104 12. Spring MVC测试...

    Spring Security-3.0.1中文官方文档(翻译版)

    Spring Security-3.0.1 中文官方文档(翻译版) 这次发布的Spring Security-3.0.1 是一个bug fix 版,主要是对3.0 中存在的一些问题进 行修 正。文档中没有添加新功能的介绍,但是将之前拼写错误的一些类名进行...

    最详细Spring Security学习资料(源码)

    身份验证:Spring Security支持多种身份验证方式,包括基本认证、表单登录、LDAP认证、OAuth等,同时也支持自定义的认证方式。 授权:Spring Security提供了细粒度的授权机制,可以根据角色、权限进行访问控制。...

    spring security 4 需要 jar 包

    spring security4 下载地址 http://repo.spring.io/snapshot/org/springframework/security/spring-security/4.0.0.CI-SNAPSHOT/ 所需要 jar 包 apacheds-core-1.5.5.jar aspectjrt-1.6.10.BUILD-20100810.234950-5...

    浅谈Spring Security LDAP简介

    主要介绍了浅谈Spring Security LDAP简介,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    SpringSecurity 3.0.1.RELEASE.CHM

    18.2. 在Spring Security里使用LDAP 18.3. 配置LDAP服务器 18.3.1. 使用嵌入测试服务器 18.3.2. 使用绑定认证 18.3.3. 读取授权 18.4. 实现类 18.4.1. LdapAuthenticator实现 18.4.1.1. 常用功能 18.4.1.2. ...

    spring security3.2.0

    在身份验证层面,Spring Security广泛支持各种身份验证模式,这些验证模型绝大多数都由第三方提供,或则正在开发的有关标准机构提供的,例如 Internet Engineering Task Force.作为补充,Spring Security 也提供了...

    Spring Security LDAP 全选管理框架 中文版

    spring 的权限管理框架 中文参考手册 单点登录,LDAP等 详细的介绍了一个权限的分配,不用自己在写过多的程序代码实现权限系统了

    spring-security Spring Security-3.0.1 中文官方文档

    spring-security-ldap-3.1.4.RELEASE spring-security-openid-3.1.4.RELEASE spring-security-remoting-3.1.4.RELEASE spring-security-taglibs-3.1.4.RELEASE spring-security-web-3.1.4.RELEASE 这些jar包都是通过...

    Spring Security 中文教程.pdf

    19.2. 在Spring Security里使用LDAP 19.3. 配置LDAP服务器 19.3.1. 使用嵌入测试服务器 19.3.2. 使用绑定认证 19.3.3. 读取授权 19.4. 实现类 19.4.1. LdapAuthenticator实现 19.4.1.1. 常用功能 ...

    SpringSecurity初体验之手动配置用户名密码

    此文章是记录博主在学习springsecurity时的笔记 第一步 创建一个SpringBoot工程,勾选上需要的依赖。 第二步 创建一个名为securityconfig的配置类,该类基础了父类WebSecurityConfigurerAdapter(提供用于创建...

    springboot-oauth2-ldap-example:Belajar Spring Security OAuth2 + JWT + LDAP

    LDAP的安全性Oauth2请求令牌curl -X POST \ ' ...

    springboot-ldap:该项目的目标是创建一个简单的Spring-Boot REST API(称为简单服务),并使用Spring Security LDAP模块对其进行保护。

    该项目的目标是创建一个简单的 REST API(称为simple-service ,并使用Spring Security LDAP模块对其进行Spring Security LDAP 。 应用 简单服务 Spring Boot Java Web应用程序公开了两个端点: GET /api/public ...

Global site tag (gtag.js) - Google Analytics