1

我正在努力在我的项目中实施 Spring Security。我需要使用 Spring Security 从证书 CN 中提取的用户名作为uidLDAP 服务器上的用户名。我不确定解决这个问题的正确方法。我不确定如何将 CN 值从 x509 传递到 LDAP 身份验证器。有人以前做过这个或有任何想法吗?

注意:我不需要将整个证书传递给 LDAP 服务器,因为它们没有存储在那里,只有来自 CN 的用户名。

编辑:这是我的 spring security xml 文件中的一些配置:

<http>
    <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <anonymous />
    <x509 subject-principal-regex="CN=(.*?)," /> <!-- user-service-ref needed? -->
</http>

<ldap-server id="ldapServer" url="ldap://localhost:389/dc=example,dc=com" manager-dn="cn=manager,dc=example,dc=com" manager-password="myPassword" />

<authentication-manager>
    <ldap-authentication-provider
       user-dn-pattern="uid={0},ou=people"
       user-search-filter="(uid={0})"
       user-search-base="ou=people,dc=example,dc=com"
       group-search-filter="(member={0})"
       group-search-base="ou=groups"
       group-role-attribute="cn" />        
</authentication-manager>
4

1 回答 1

1

你应该使用一个ldap-user-service. 这是来自 Spring Security 测试套件的示例配置。然后 Spring Security 应该自动替换它从证书 CN 中提取的用户名来代替{0}LDAP 搜索过滤器中的标记。

ldap-authentication-provider元素用于使用用户名和密码对用户进行身份验证,这不是 X.509 想要的,其中容器对证书的验证被视为执行身份验证。

Spring Security 的 X.509 身份验证过滤器需要一个UserDetailsService为用户加载信息,因此您需要在配置中使用一个。如手册中所述user-service-ref,如果只有一个属性,则不需要使用该属性,因此只需添加ldap-user-service声明就足够了。

于 2013-01-29T21:25:33.623 回答