Active Directory support for LDAP (#2056)
* AD support for LDAP * Review suggestions, documentation update
This commit is contained in:
parent
119c7d0107
commit
541e4018ec
2 changed files with 24 additions and 3 deletions
|
@ -29,14 +29,19 @@ services:
|
||||||
AUTH_TYPE: "LDAP"
|
AUTH_TYPE: "LDAP"
|
||||||
SPRING_LDAP_URLS: "ldap://ldap:10389"
|
SPRING_LDAP_URLS: "ldap://ldap:10389"
|
||||||
SPRING_LDAP_DN_PATTERN: "cn={0},ou=people,dc=planetexpress,dc=com"
|
SPRING_LDAP_DN_PATTERN: "cn={0},ou=people,dc=planetexpress,dc=com"
|
||||||
# USER SEARCH FILTER INSTEAD OF DN
|
|
||||||
|
# ===== USER SEARCH FILTER INSTEAD OF DN =====
|
||||||
|
|
||||||
# SPRING_LDAP_USERFILTER_SEARCHBASE: "dc=planetexpress,dc=com"
|
# SPRING_LDAP_USERFILTER_SEARCHBASE: "dc=planetexpress,dc=com"
|
||||||
# SPRING_LDAP_USERFILTER_SEARCHFILTER: "(&(uid={0})(objectClass=inetOrgPerson))"
|
# SPRING_LDAP_USERFILTER_SEARCHFILTER: "(&(uid={0})(objectClass=inetOrgPerson))"
|
||||||
# LDAP ADMIN USER
|
# LDAP ADMIN USER
|
||||||
# SPRING_LDAP_ADMINUSER: "cn=admin,dc=planetexpress,dc=com"
|
# SPRING_LDAP_ADMINUSER: "cn=admin,dc=planetexpress,dc=com"
|
||||||
# SPRING_LDAP_ADMINPASSWORD: "GoodNewsEveryone"
|
# SPRING_LDAP_ADMINPASSWORD: "GoodNewsEveryone"
|
||||||
|
|
||||||
|
# ===== ACTIVE DIRECTORY =====
|
||||||
|
|
||||||
|
# OAUTH2.LDAP.ACTIVEDIRECTORY: true
|
||||||
|
# OAUTH2.LDAP.AСTIVEDIRECTORY.DOMAIN: "memelord.lol"
|
||||||
|
|
||||||
ldap:
|
ldap:
|
||||||
image: rroemhild/test-openldap:latest
|
image: rroemhild/test-openldap:latest
|
||||||
|
|
|
@ -14,8 +14,10 @@ import org.springframework.security.authentication.ReactiveAuthenticationManager
|
||||||
import org.springframework.security.authentication.ReactiveAuthenticationManagerAdapter;
|
import org.springframework.security.authentication.ReactiveAuthenticationManagerAdapter;
|
||||||
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
|
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
|
||||||
import org.springframework.security.config.web.server.ServerHttpSecurity;
|
import org.springframework.security.config.web.server.ServerHttpSecurity;
|
||||||
|
import org.springframework.security.ldap.authentication.AbstractLdapAuthenticationProvider;
|
||||||
import org.springframework.security.ldap.authentication.BindAuthenticator;
|
import org.springframework.security.ldap.authentication.BindAuthenticator;
|
||||||
import org.springframework.security.ldap.authentication.LdapAuthenticationProvider;
|
import org.springframework.security.ldap.authentication.LdapAuthenticationProvider;
|
||||||
|
import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
|
||||||
import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
|
import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
|
||||||
import org.springframework.security.ldap.search.LdapUserSearch;
|
import org.springframework.security.ldap.search.LdapUserSearch;
|
||||||
import org.springframework.security.web.server.SecurityWebFilterChain;
|
import org.springframework.security.web.server.SecurityWebFilterChain;
|
||||||
|
@ -39,6 +41,11 @@ public class LdapSecurityConfig extends AbstractAuthSecurityConfig {
|
||||||
@Value("${spring.ldap.userFilter.searchFilter:#{null}}")
|
@Value("${spring.ldap.userFilter.searchFilter:#{null}}")
|
||||||
private String userFilterSearchFilter;
|
private String userFilterSearchFilter;
|
||||||
|
|
||||||
|
@Value("${oauth2.ldap.activeDirectory:false}")
|
||||||
|
private boolean isActiveDirectory;
|
||||||
|
@Value("${oauth2.ldap.aсtiveDirectory.domain:#{null}}")
|
||||||
|
private String activeDirectoryDomain;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public ReactiveAuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource) {
|
public ReactiveAuthenticationManager authenticationManager(BaseLdapPathContextSource contextSource) {
|
||||||
BindAuthenticator ba = new BindAuthenticator(contextSource);
|
BindAuthenticator ba = new BindAuthenticator(contextSource);
|
||||||
|
@ -51,9 +58,15 @@ public class LdapSecurityConfig extends AbstractAuthSecurityConfig {
|
||||||
ba.setUserSearch(userSearch);
|
ba.setUserSearch(userSearch);
|
||||||
}
|
}
|
||||||
|
|
||||||
LdapAuthenticationProvider lap = new LdapAuthenticationProvider(ba);
|
AbstractLdapAuthenticationProvider authenticationProvider;
|
||||||
|
if (!isActiveDirectory) {
|
||||||
|
authenticationProvider = new LdapAuthenticationProvider(ba);
|
||||||
|
} else {
|
||||||
|
authenticationProvider = new ActiveDirectoryLdapAuthenticationProvider(activeDirectoryDomain, ldapUrls);
|
||||||
|
authenticationProvider.setUseAuthenticationRequestCredentials(true);
|
||||||
|
}
|
||||||
|
|
||||||
AuthenticationManager am = new ProviderManager(List.of(lap));
|
AuthenticationManager am = new ProviderManager(List.of(authenticationProvider));
|
||||||
|
|
||||||
return new ReactiveAuthenticationManagerAdapter(am);
|
return new ReactiveAuthenticationManagerAdapter(am);
|
||||||
}
|
}
|
||||||
|
@ -71,6 +84,9 @@ public class LdapSecurityConfig extends AbstractAuthSecurityConfig {
|
||||||
@Bean
|
@Bean
|
||||||
public SecurityWebFilterChain configureLdap(ServerHttpSecurity http) {
|
public SecurityWebFilterChain configureLdap(ServerHttpSecurity http) {
|
||||||
log.info("Configuring LDAP authentication.");
|
log.info("Configuring LDAP authentication.");
|
||||||
|
if (isActiveDirectory) {
|
||||||
|
log.info("Active Directory support for LDAP has been enabled.");
|
||||||
|
}
|
||||||
|
|
||||||
http
|
http
|
||||||
.authorizeExchange()
|
.authorizeExchange()
|
||||||
|
|
Loading…
Add table
Reference in a new issue