当前位置: 首页 > 知识库问答 >
问题:

使用Spring security 2.0.3进行LDAP身份验证

孔海超
2023-03-14

我正在尝试使用spring security 2.0.3进行LDAP身份验证

下面是我的配置

<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
        <constructor-arg value="ldap://IP:3268"/>
        <property name="base" value="dc=alliance",dc=com,OU=Users,OU=India"/>
        <property name="userDn" value="sAMAccountName=username" />
        <property name="password" value="password" />
    </bean>



    <bean id="ldapProvider" class="org.springframework.security.providers.ldap.LdapAuthenticationProvider">
        <sec:custom-authentication-provider/>
        <constructor-arg>
            <bean class="org.springframework.security.providers.ldap.authenticator.BindAuthenticator">
                <constructor-arg ref="contextSource"/>
                <!--<property name="userSearch" ref="ldapSearchBean"/>-->
                <property name="userDnPatterns">
                   <list><value>sAMAccountName={0}</value></list>
                 </property>
            </bean>
        </constructor-arg>
        <constructor-arg>
            <bean class="org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator">
                <constructor-arg ref="contextSource"/>
                <constructor-arg value="ou=groups"/>
                <property name="groupSearchFilter" value="member={0}"/>
                <property name="groupRoleAttribute" value="ou"/>
                <property name="rolePrefix" value="ROLE_"/>
                <property name="searchSubtree" value="true"/>
                <property name="convertToUpperCase" value="true"/>
            </bean>
        </constructor-arg>
    </bean>
<dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>2.0.3</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<dependency>
            <groupId>org.springframework.ldap</groupId>
            <artifactId>spring-ldap</artifactId>
            <version>1.2.1</version>
        </dependency>

我应该在哪里提到域名?

共有1个答案

瞿健
2023-03-14

如果联机搜索错误消息,您将发现类似于Active Directory错误的页面,该页面在顶部列出了您的错误:

Common Active Directory LDAP bind errors:

80090308: LdapErr: DSID-0C09030B, comment: AcceptSecurityContext error, data 525, v893
HEX: 0×525 – user not found
DEC: 1317 – ERROR_NO_SUCH_USER (The specified account does not exist.)
NOTE: Returns when username is invalid.

所以根据AD的说法,用户并不存在。您尝试将samAccountName属性用作DN模式的一部分,但由于它是LDAP属性,因此无法使用。您需要使用搜索首先根据该属性的值定位用户。在这个网站和Web上的其他地方有如何做到这一点的例子。看起来您已经尝试过了,因为您注释掉了一个搜索bean。如果这不起作用,你应该解释你的问题出了什么问题。

事实上,它似乎失败了,因为您的上下文源有一些问题。userdn属性的值错误。它需要是目录中有效的可分辨名称,而“samaccountname=username”不是。“base”属性看起来也不正确。它通常应该是一棵树,树的根(dc=mycompany,dc=com)位于树的末尾。因此可能应该是ou=mygroup,ou=mycountry,dc=mycompany,dc=com

最后,您不应该使用2.0.3版本。它已知安全漏洞。始终保持最新的补丁和正在使用的库的新版本-在OWASP“十大”中排名第六。检查最新版本也是有意义的,以防遇到已经修复的bug。

 类似资料:
  • 下面是我得到的错误(堆栈跟踪中列出的最后几个原因) 它似乎不喜欢contextSource bean的constructor-arg中列出的URL,尽管我不确定原因。 另外,我怀疑这个配置的其他部分是不正确的。例如,我在ldap-server标记和contextSource bean中定义了ldap服务器URL。这似乎是不必要的重复,但在示例中是这样做的。有人能好好看看配置,以确保它是正常的吗?

  • 我正在尝试将Spring身份验证与嵌入式ldap集成。 我在本地ldif文件中有用户信息。 用户1 用户2 Spring网络安全配置文件 配置文件中的userDnPattern我使用了ou=people(uid={0},ou=people),所以我可以对bob进行身份验证。说到乔,他的目录路径是不同的。所以我无法使用joe的用户名和密码登录。 无论目录结构如何,我对所有用户进行身份验证的Sprin

  • 我试图建立一个新的服务器,作为网关(使用sping-Cloud-网关作为基础),我需要能够在实际转发任何后续请求之前通过远程LDAP服务器验证用户。我将如何实现这个(包,配置等)?

  • 在这里尝试看看是否有人已经用Rundeck对AD进行了LDAP身份验证。我正在使用RunDesk的JRE运行方法。以下是我到目前为止所做的工作: 我已经设置了jaas-ldap.conf,如Rundeck authentication users页面所示 我已向管理员请求ssl证书。要使用ldaps,rundeck需要ssl证书,这是在他们的站点上编写的。获得证书后,他们提到以下两个步骤: 一旦获

  • 我一直在尝试使用DEX for LDAP来验证OIDC。我已经成功地进行了身份验证,但问题是,LDAP搜索没有返回组。下面是我的DEX配置和LDAP数据。请帮帮我 截图:登录成功,群为空 我的Dex配置 dn:uid=janedoe,ou=people,dc=ec2-54-185-211-121,dc=us-west-2,dc=compute,dc=amazonaws,dc=com gecos:j

  • 我正在尝试用.NET中的LDAP制作一个简单的身份验证系统。我检查了.NET中的一些名称空间,并简单地制作了标准代码片段,如下所示。 我有一个管理员用户名和密码和,用于对客户端应用程序进行身份验证。我有第二个用户名和密码和,需要在LDAP中检查才能登录。 是管理帐户,只是LDAP中的用户。那么如何检查的密码呢?