Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证相关的知识,希望对你有一定的参考价值。

配置LDAP身份验证时,我收到LDAP身份验证错误。我的属性文件如下配置:

 ldap.urls=ldap://***.***.local:8389
    ldap.base.dn=dc=test,dc=com
    ldap.user.dn.pattern=(&(objectClass=user)(userPrincipalName={0})(memberof=CN=Group Name,OU=***,OU=****,DC=test,DC=com))

通过传递有效的用户名和密码获取以下错误来访问wsdl:

While accessing wsdl it is asking username & Password. If we provided then it saying that “ActiveDirectoryLdapAuthenticationProvider - Active Directory authentication failed: Supplied password was invalid

在启动应用程序时,我能够在下面登录控制台:

`org.springframework.ldap.core.support.AbstractContextSource - Property 'userDn' not set - anonymous context will be used for read-write operation`

对于SOAP调用,因为我在SOAPWebServiceConfig.java中提供了更多,甚至没有工作。

//XwsSecurityInterceptor
    @Bean
    public XwsSecurityInterceptor securityInterceptor(){
        XwsSecurityInterceptor securityInterceptor = new XwsSecurityInterceptor();
        //Callback Handler -> SimplePasswordValidationCallbackHandler
        securityInterceptor.setCallbackHandler(callbackHandler());
        //Security Policy -> securityPolicy.xml
        securityInterceptor.setPolicyConfiguration(new ClassPathResource("securityPolicy.xml"));
        return securityInterceptor;
    }

    @Bean
    public SimplePasswordValidationCallbackHandler callbackHandler() {
        SimplePasswordValidationCallbackHandler handler = new SimplePasswordValidationCallbackHandler();
        handler.setUsersMap(Collections.singletonMap("user", "password"));
        return handler;
    }

    //Interceptors.add -> XwsSecurityInterceptor
    @Override
    public void addInterceptors(List<EndpointInterceptor> interceptors) {
        interceptors.add(securityInterceptor());
    }

我不知道这里有什么问题。任何人都可以建议这个。

答案

Active-Directory具有LDAP兼容协议,但与其他ldap目录相比,使用了一些特殊约定。要正确配置(例如,将域附加到用户名),请使用ActiveDirectoryLdapAuthenticationProvider而不是LdapAuthenticationProvider,它将在通过Properties使用自动配置时使用。然后从application.yml中删除或重命名“ldap.urls”和其他属性。

package com.test;

import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        ActiveDirectoryLdapAuthenticationProvider adProvider = new ActiveDirectoryLdapAuthenticationProvider("domain.org",
                "ldap://activedirectory-url:389");
        adProvider.setConvertSubErrorCodesToExceptions(true);
        adProvider.setUseAuthenticationRequestCredentials(true);
        auth.authenticationProvider(adProvider);
    }

}

以上是关于Spring Security - 在Spring Boot中针对LDAP使用Active Directory对用户进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Spring security:Spring security 如何在 SessionRegistry 中注册新会话?

Spring 中的 spring-security-oauth2 与 spring-security-oauth2-core

spring boot 整合spring security中spring security版本升级的遇到的坑

仅使用 Spring-Security(或)Spring 进行授权

使用 spring-session 和 spring-cloud-security 时,OAuth2ClientContext (spring-security-oauth2) 不会保留在 Redis

spring-security