LDAP 命名空间选项
LDAP 实现广泛使用了 Spring LDAP,因此对该项目的 API 有一些了解可能会有所帮助。
使用 {#nsa-ldap-server} 定义 LDAP 服务器
<ldap-server>
元素 此元素设置一个 Spring LDAP ContextSource
,供其他 LDAP beans 使用,定义 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 服务器。值为
apacheds
和unboundid
。默认情况下,它将取决于类路径中是否存在该库。 -
id 一个 bean 标识符,用于在上下文的其他地方引用该 bean。
-
ldif 显式指定要加载到嵌入式 LDAP 服务器中的 ldif 文件资源。ldif 应该是一个 Spring 资源模式(即 classpath:init.ldif)。默认是 classpath*:*.ldif
-
manager-dn 用于认证到非嵌入式 LDAP 服务器的“管理员”用户身份的用户名(DN)。如果省略,则使用匿名访问。
-
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 包含将在 Spring Security 中使用的角色名称的 LDAP 属性名。默认为 "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})
。被替换的参数是用户的登录名。