Şu satırı dahil ederiz
import org.springframework.security.ldap.authentication.LdapAuthenticationProvider;
Spring tarafından hazır sağlanan bir Provider sınıfıdır. AuthenticationProvider arayüzünden kalıtır.
Eğer LDAP kodlarını kendimiz yazmak istersek yani Custom Authentication Provider sağlamak istersek, AuthenticationProvider'dan kalıtan bir sınıf kodlayım bunun içinde
sınıflarını kullanırız
Ama ne gerek var :)
Eğer reactive yöntem kullanmak istersek bir örnek burada
Maven
Şu satırı dahil ederiz
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-ldap</artifactId> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-ldap</artifactId> </dependency> <dependency> <groupId>org.springframework.ldap</groupId> <artifactId>spring-ldap-core</artifactId> </dependency>
Genel Kullanım
Örnek
Şöyle yaparız. Burada kullanıcı form ile giriş yapıyor ancak doğrulama işlemini Ldap yapıyor.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${spring.ldap.urls}")
private String ldapUrl;
@Value("${spring.ldap.base}")
private String ldapBase;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic();
}
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.contextSource()
.url(ldapUrl + ldapBase)
.and()
.passwordCompare()
.passwordEncoder(new BCryptPasswordEncoder())
.passwordAttribute("userPassword");
}
}
Örnek - XML
Şöyle yaparız
Örnek
Şöyle yaparız
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="userDetailsService"/>
<security:authentication-provider ref="ldapProvider"/>
</security:authentication-manager>
<bean id="userDetailsService" class="*******.CustomUserDetailsService">
<property name="userDetailsService" ref="userDetailsService"/>
<property name="dataSource" ref="dataSource"/>
<property name="annotatedSessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="ldapProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg ref="authenticator"/>
<constructor-arg ref="ldapAuthPopulator"/>
</bean>
userDnPatterns metodu
Belirtilen pattern'a uyan kullanıcıyı bulmaya çalışır.
ContextSource nesnesine ait url metodu LDAP'ın başlangıç arama yolunu belirtir. Şuna benzer
"ldap://ldap.forumsys.com:389/dc=example,dc=com"
Şöyle yaparız. {0} kullanıcı ismi anlamına gelir.
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.ldapAuthentication()
.userDnPatterns("uid={0},ou=people")
.groupSearchBase("ou=groups")
.userSearchFilter("uid={0}")
.groupSearchBase("ou=groups")
.groupSearchFilter("uniqueMember={0}")
.contextSource()
.url(ldapUrl);
}
userSearchFilter metodu
Şöyle yaparız
@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.ldapAuthentication().userSearchFilter("(uid={0})").contextSource().url("ldap://localhost:8389/dc=breadcrumbdata,dc=com");}
Diğer
managerDn
LDAP'a bağlanan kullanıcı ismidir. Şuna benzer
"cn=read-only-admin,dc=example,dc=com"
managerPassword
LDAP'a bağlanan kullanıcı şifresidir. Şuna benzer
"password "
Hiç yorum yok:
Yorum Gönder