How to implement Spring Security Ldap authentication using the configurer class correctly? -
hi i'm trying implement spring's ldap authentication using websecurityconfigureradapter class.
so far can authenticate through in memory method , corp's ldap server, latter method i'm able authenticate if pass hardcoded userdn , password when create new context, if don't create new context or don't put userdn , password, jvm throws me:
caused by: javax.naming.namingexception: [ldap: error code 1 - 000004dc: ldaperr: dsid-0c0906e8, comment: in order perform operation successful bind must completed on connection., data 0, v1db1\u0000]; remaining name: '/'
my question is, how can user password , userdn login form can put in context? if not possible how can context password , userdn are?
this code have:
@configuration @enablewebmvcsecurity public class websecurityconfig extends websecurityconfigureradapter { @autowired public void configureglobal(authenticationmanagerbuilder auth) throws exception { auth.ldapauthentication().usersearchfilter("(&(objectclass=user)(samaccountname={0}))") .groupsearchfilter("(&(memberof:1.2.840.113556.1.4.1941:=cn=dl - dc859 - middleware,ou=dyn,ou=dist,ou=security groups,ou=pop,dc=pop,dc=corp,dc=local))") .contextsource(getldapcontextsource()); } private ldapcontextsource getldapcontextsource() throws exception { ldapcontextsource cs = new ldapcontextsource(); cs.seturl("ldap://tcp-prd.pop.corp.local:389"); cs.setbase("dc=pop,dc=corp,dc=local"); cs.setuserdn("t8951435@pop.corp.local"); cs.setpassword("mypassword"); cs.afterpropertiesset(); return cs; } @override protected void configure(httpsecurity http) throws exception { http.authorizerequests() .antmatchers("/resources/**").permitall() .anyrequest().authenticated() .and() .formlogin() .loginpage("/login") .permitall(); } }
thank you.
i've figured out this post. still don't know how set group filters, @ least can bind server.
@bean public activedirectoryldapauthenticationprovider activedirectoryldapauthenticationprovider() { activedirectoryldapauthenticationprovider provider = new activedirectoryldapauthenticationprovider("pop.corp.local", "ldap://tcp-prd.pop.corp.local:389"); provider.setconvertsuberrorcodestoexceptions(true); provider.setuseauthenticationrequestcredentials(true); return provider; } @bean public loggerlistener loggerlistener() { return new loggerlistener(); } @override protected void configure(authenticationmanagerbuilder auth) throws exception { auth.authenticationprovider(activedirectoryldapauthenticationprovider()); } @override protected void configure(httpsecurity http) throws exception { http .authorizerequests() .antmatchers("/resources/**").permitall() .anyrequest().authenticated() .and() .formlogin() .loginpage("/login") .permitall(); }
edit: found out how filter groups. turns out added setsearchfilter() method in activedirectoryldapauthenticationprovider class v3.2.6. using older version never knew this. made copy of class method , created buildfilter method create filter string passed setsearchfilter.
Comments
Post a Comment