【问题标题】:LDAP with SpringLDAP 与 Spring
【发布时间】:2014-01-26 08:35:42
【问题描述】:

我想在我的应用程序中使用 LDAP 来进行身份验证

我在之前的配置中使用了数据库来进行身份验证

这是我之前的配置:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                    http://www.springframework.org/schema/security 
                    http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http auto-config="true" use-expressions="true">
        <intercept-url pattern="/test/**" access="hasRole('ADMIN')" />
        <intercept-url pattern="/test1/**" access="hasRole('USER')" />



         <form-login login-page="/index.htm" authentication-success-handler-ref="authenticationSuccessRedirecthandler"
          default-target-url = "/test/MainHealthCertificat.htm"
            authentication-failure-url="/index.htm?error=1"/>
        <logout logout-success-url="/index.htm" />


    </http>


    <beans:bean class="com..CustomAuthenticationHandler" id="authenticationSuccessRedirecthandler"></beans:bean>

    <authentication-manager>
        <authentication-provider>

                <jdbc-user-service data-source-ref="dataSource" 
                                        users-by-username-query="select username, password, enabled from users where username=?"  
                    authorities-by-username-query="select u.username, ur.authority from users u, user_roles ur where u.user_id = ur.user_id and u.username =?  " 
                />

        </authentication-provider>
    </authentication-manager>
</beans:beans>

这是我的 java 类:

public class CustomAuthenticationHandler extends SimpleUrlAuthenticationSuccessHandler {

 @Override
 public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException {

      String adminTargetUrl = "/test/mypage.htm";


      Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());


      if (roles.contains("ADMIN")) {  
         getRedirectStrategy().sendRedirect(request, response, adminTargetUrl);
      }else {
         super.onAuthenticationSuccess(request, response, authentication);
         return;
      }
   }
}

不,我想使用 ldap 进行身份验证

我修改了security-app-context.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
        xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security 
                        http://www.springframework.org/schema/security/spring-security-3.1.xsd">

        <http auto-config="true" use-expressions="true">
            <intercept-url pattern="/test/**" access="hasRole('ADMIN')" />
            <intercept-url pattern="/test1/**" access="hasRole('USER')" />



             <form-login login-page="/index.htm" authentication-success-handler-ref="authenticationSuccessRedirecthandler"
              default-target-url = "/test/MainHealthCertificat.htm"
                authentication-failure-url="/index.htm?error=1"/>
            <logout logout-success-url="/index.htm" />


        </http>


        <beans:bean class="com..CustomAuthenticationHandler" id="authenticationSuccessRedirecthandler"></beans:bean>

         <security:authentication-manager>
         <security:ldap-authentication-provider 
           user-search-filter="(uid={0})"
           user-search-base="ou=users"
           group-search-filter="(uniqueMember={0})"
           group-search-base="ou=groups"
           group-role-attribute="cn"
           role-prefix="ROLE_">
         </security:ldap-authentication-provider>
 </security:authentication-manager>

 <security:ldap-server url="ldap://192.168.0.88:389" manager-dn="uid=admin,ou=system" manager-password="secret" />
    </beans:beans>

但是当我测试我有这个错误:

Caused by: org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 52e, v1db0

老实说,我迷失在设置 ldap 参数中:ou dc, cn,

我需要帮助配置security-app-context.xml中ldap的参数

这是一个正确的ldap参数,应该在security-app-context.xml中使用

基本提供者网址

ldap://192.168.0.88:389

基本 DN

DC=部长,DC=FR

校长

CN=LDAP 请求者,OU=用户,OU=技术帐户,OU=P9 帐户,DC=MINISTER,DC=FR

凭据

部长$9999

用户

身份验证搜索过滤器

(&(objectClass=person)(mail=@email_address@))

导入搜索过滤器

(objectClass=person)

用户映射

屏幕名称

sAMAccountName

密码

用户密码

电子邮件地址

邮件

全名

cn

名字

给定名称

中间名

中间名

姓氏

sn

成员

群组

导入搜索过滤器

(&(objectClass=group)(|(cn=MinisterUsers)(cn=MinisterAdministrateurs)(cn=Minister_*)))

组映射

组名

cn

说明

sAMAccountName

用户

会员

导出

用户 DN DC=MINISTER,DC=FR

组 DN DC=MINISTER,DC=FR

【问题讨论】:

    标签: java xml active-directory


    【解决方案1】:

    错误代码data 52e表示提供的凭据无效。

    请尝试删除这些属性ma​​nager-dn="uid=admin,ou=system" manager-password="secret" 在下面。

    <security:ldap-server url="ldap://192.168.0.88:389" manager-dn="uid=admin,ou=system" manager-password="secret" />
    

    再试一次。这些是 LDAP 管理凭据,用户身份验证不需要这些凭据。用户身份验证使用您在登录期间提供的值完成,spring 默认尝试使用提供的详细信息绑定到 LDAP。

    还可以尝试通过在 security-app-context.xml 中包含 标签来启用调试,并添加 log4j.properties。这将为调试提供大量有用的信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 2021-05-07
      • 2011-01-23
      • 2018-04-15
      • 2015-07-22
      • 1970-01-01
      • 2022-10-21
      相关资源
      最近更新 更多