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