LDAP 命名空间选项
LDAP 实现广泛使用了 Spring LDAP,因此熟悉该项目的 API 可能会有所帮助。
定义 LDAP 服务器
<ldap-server> 元素
该元素用于配置 Spring LDAP 的 ContextSource,以供其他 LDAP Bean 使用。它定义了 LDAP 服务器的位置以及连接所需的其他信息(例如,如果不允许匿名访问,则需提供用户名和密码)。该元素也可用于创建嵌入式服务器以进行测试。两种选项的语法细节请参阅 LDAP 章节。实际的 ContextSource 实现是 DefaultSpringSecurityContextSource,它继承自 Spring LDAP 的 LdapContextSource 类。其中 manager-dn 和 manager-password 属性分别对应后者的 userDn 和 password 属性。
如果你的应用上下文中只定义了一个服务器,其他LDAP命名空间定义的bean将自动使用它。否则,你可以给该元素添加一个"id"属性,并通过server-ref属性从其他命名空间bean中引用它。实际上,这就是ContextSource实例的bean id,如果你希望在其他传统的Spring bean中使用它的话。
<ldap-server> 属性
-
mode 显式指定应使用哪种嵌入式 LDAP 服务器。唯一支持的值是
unboundid。默认情况下,它将取决于类路径中是否可用该库。 -
id Bean 标识符,用于在上下文的其他地方引用该 bean。
-
ldif 显式指定要加载到嵌入式 LDAP 服务器中的 ldif 文件资源。该 ldif 文件应为 Spring 资源模式(例如 classpath:init.ldif)。默认值为 classpath*:*.ldif。
-
manager-dn "管理员"用户身份的用户名(DN),用于向(非嵌入式)LDAP 服务器进行身份验证。如果省略,将使用匿名访问。
-
manager-password 管理员 DN 的密码。如果指定了 manager-dn,则此属性是必需的。
-
port 指定 IP 端口号。例如,用于配置嵌入式 LDAP 服务器。默认值为 33389。
-
root 嵌入式 LDAP 服务器的可选根后缀。默认为 "dc=springframework,dc=org"。
-
url 在不使用嵌入式 LDAP 服务器时,指定 LDAP 服务器的 URL。
<ldap-authentication-provider>
此元素是创建 LdapAuthenticationProvider 实例的简写形式。默认情况下,它将配置一个 BindAuthenticator 实例和一个 DefaultAuthoritiesPopulator。与所有命名空间身份验证提供程序一样,它必须作为 authentication-provider 元素的子元素包含在内。
<ldap-authentication-provider> 的父元素
<ldap-authentication-provider> 属性
-
group-role-attribute 包含将在 Spring Security 中使用的角色名称的 LDAP 属性名。映射到
DefaultLdapAuthoritiesPopulator的groupRoleAttribute属性。默认值为 "cn"。 -
group-search-base 组成员身份搜索的搜索基准。映射到
DefaultLdapAuthoritiesPopulator的groupSearchBase构造函数参数。默认值为 ""(从根目录开始搜索)。 -
group-search-filter 组搜索过滤器。映射到
DefaultLdapAuthoritiesPopulator的groupSearchFilter属性。默认值为(uniqueMember={0})。被替换的参数是用户的 DN。 -
role-prefix 一个非空字符串前缀,将添加到从持久化存储加载的角色字符串前。映射到
DefaultLdapAuthoritiesPopulator的rolePrefix属性。默认值为 "ROLE_"。在默认值非空但不需要前缀的情况下,使用值 "none" 表示无前缀。 -
server-ref 要使用的可选服务器。如果省略,并且已注册了默认的 LDAP 服务器(使用没有 Id 的 <ldap-server>),则将使用该服务器。
-
user-context-mapper-ref 允许通过指定一个 UserDetailsContextMapper bean 来显式自定义加载的用户对象,该 bean 将使用用户目录条目中的上下文信息进行调用。
-
user-details-class 允许指定用户条目的 objectClass。如果设置,框架将尝试将定义类的标准属性加载到返回的 UserDetails 对象中。
-
user-dn-pattern 如果您的用户在目录中的位置是固定的(即,您可以直接根据用户名计算出 DN,而无需进行目录搜索),则可以使用此属性直接映射到 DN。它直接映射到
AbstractLdapAuthenticator的userDnPatterns属性。该值是用于构建用户 DN 的特定模式,例如uid={0},ou=people。键{0}必须存在,并将被用户名替换。 -
user-search-base 用户搜索的搜索基准。默认值为 ""。仅与 'user-search-filter' 一起使用。
如果需要执行搜索以在目录中定位用户,则可以设置这些属性来控制搜索。
BindAuthenticator将配置一个FilterBasedLdapUserSearch,并且属性值直接映射到该 bean 构造函数的前两个参数。如果未设置这些属性,并且没有提供user-dn-pattern作为替代方案,则将使用默认搜索值user-search-filter="(uid={0})"和user-search-base=""。 -
user-search-filter 用于搜索用户的 LDAP 过滤器(可选)。例如
(uid={0})。被替换的参数是用户的登录名。如果需要执行搜索以在目录中定位用户,则可以设置这些属性来控制搜索。
BindAuthenticator将配置一个FilterBasedLdapUserSearch,并且属性值直接映射到该 bean 构造函数的前两个参数。如果未设置这些属性,并且没有提供user-dn-pattern作为替代方案,则将使用默认搜索值user-search-filter="(uid={0})"和user-search-base=""。
<ldap-authentication-provider> 的子元素
<password-compare>
此元素作为 <ldap-provider> 的子元素使用,用于将身份验证策略从 BindAuthenticator 切换为 PasswordComparisonAuthenticator。
<password-compare> 的父元素
<password-compare> 属性
-
hash 定义用于用户密码的哈希算法。我们强烈建议不要使用MD4,因为它是一种非常弱的哈希算法。
-
password-attribute 目录中包含用户密码的属性。默认为 "userPassword"。
<password-compare> 的子元素
<ldap-user-service>
该元素用于配置一个LDAP UserDetailsService。使用的类是 LdapUserDetailsService,它是 FilterBasedLdapUserSearch 和 DefaultLdapAuthoritiesPopulator 的组合。它支持的属性与 <ldap-provider> 中的用法相同。
<ldap-user-service> 属性
-
cache-ref 定义对缓存的引用,用于UserDetailsService。
-
group-role-attribute 包含角色名称的LDAP属性名,该角色名称将在Spring Security中使用。默认为"cn"。
-
group-search-base 组成员搜索的搜索基准。默认为""(从根目录开始搜索)。
-
group-search-filter 组搜索过滤器。默认为
(uniqueMember={0})。被替换的参数是用户的DN。 -
id Bean标识符,用于在上下文的其他地方引用该Bean。
-
role-prefix 一个非空字符串前缀,将添加到从持久化存储加载的角色字符串前(例如"ROLE_")。当默认值为非空时,使用值"none"表示不加前缀。
-
server-ref 要使用的可选服务器。如果省略,并且注册了默认的LDAP服务器(使用没有Id的<ldap-server>),则将使用该服务器。
-
user-context-mapper-ref 通过指定一个UserDetailsContextMapper Bean,允许显式自定义加载的用户对象,该Bean将使用来自用户目录条目的上下文信息进行调用。
-
user-details-class 允许指定用户条目的objectClass。如果设置,框架将尝试将定义类的标准属性加载到返回的UserDetails对象中。
-
user-search-base 用户搜索的搜索基准。默认为""。仅与'user-search-filter'一起使用。
-
user-search-filter 用于搜索用户的LDAP过滤器(可选)。例如
(uid={0})。被替换的参数是用户的登录名。