将 X509 值传递给 LDAP 服务器
Posted
技术标签:
【中文标题】将 X509 值传递给 LDAP 服务器【英文标题】:Passing X509 value to LDAP server 【发布时间】:2013-01-12 11:09:07 【问题描述】:我正在努力在我的项目中实施 Spring Security。我需要使用 Spring Security 从证书 CN 中提取的用户名作为 LDAP 服务器上的uid
。我不确定解决这个问题的正确方法。我不确定如何将 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>
【问题讨论】:
CN 不是 UID。您的问题描述存在严重问题。 也许我应该澄清一下:我有一个正则表达式,我正在提取 CN 的一部分。那部分无关紧要。相关部分是我要问的,如何将我提取的值传递到 LDAP 服务器。我已经添加到我目前拥有的标签中。谢谢 【参考方案1】:您应该使用ldap-user-service
。这是来自 Spring Security 测试套件的an example configuration。然后 Spring Security 应该自动替换它从证书 CN 中提取的用户名来代替 LDAP 搜索过滤器中的 0
标记。
ldap-authentication-provider
元素用于使用用户名和密码对用户进行身份验证,这在 X.509 中不是您想要的,在 X.509 中,容器对证书的验证被视为执行身份验证。
Spring Security 的 X.509 身份验证过滤器需要一个 UserDetailsService
来为用户加载信息,因此您需要在配置中使用一个。正如in the manual 所解释的,如果只有一个属性,则不需要使用user-service-ref
属性,因此只需添加ldap-user-service
声明就足够了。
【讨论】:
这帮助我部署了一切。我现在无法获得用户身份验证。没有显示日志记录,我将如何启用它?此外,role-prefix="none"
不起作用,仍然在自定义角色上抛出属性错误。有什么想法吗?
检查任何示例应用程序以了解如何配置日志记录。我不知道您所说的“在自定义角色上引发属性错误”是什么意思。
例如,如果我在ldap-user-service
下输入role-prefix="none"
并使用自定义角色,例如<intercept-url pattern="/**" access="user" />
,我会收到错误消息Unsupported configuration attributes: [user]
。根据文档,将角色设置为无,我可以使用自己的自定义角色,但这似乎不起作用。
如果您删除角色前缀,标准 RoleVoter
将不会使用这些属性(请参阅常见问题解答)。您可以切换到使用表达式而不是 <http use-expressions='true'>
并使用 access="hasRole('user')"
以上是关于将 X509 值传递给 LDAP 服务器的主要内容,如果未能解决你的问题,请参考以下文章
将字典值作为空值传递给 alamofire 服务 ios swift
无法使用 asp.net Web 服务将 ajax 标头值传递给我的 Web 服务方法