Proljetni LDAP pregled

1. Pregled

LDAP poslužitelji direktorija su hijerarhijske pohrane podataka optimizirane za čitanje. Tipično se koriste za pohranu podataka povezanih s korisnikom potrebnih za autentifikaciju i autorizaciju korisnika.

U ovom ćemo članku istražiti Spring LDAP API-je za provjeru autentičnosti i traženje korisnika, kao i za stvaranje i izmjenu korisnika na poslužitelju direktorija. Isti skup API-ja može se koristiti za upravljanje bilo kojom drugom vrstom unosa u LDAP-u.

2. Ovisnosti Mavena

Počnimo s dodavanjem potrebne ovisnosti o Mavenu:

 org.springframework.ldap spring-ldap-core 2.3.1.OSLOBOĐENJE 

Najnoviju verziju ove ovisnosti možete pronaći na spring-ldap-core.

3. Priprema podataka

U svrhu ovog članka, napravimo prvo sljedeći LDAP unos:

ou = korisnici, dc = primjer, dc = com (objektKlasa = organizacijskajedinica)

U okviru ovog čvora stvorit ćemo nove korisnike, modificirati postojeće, provjeriti autentičnost postojećih korisnika i tražiti informacije.

4. Proljetni LDAP API-ji

4.1. ContextSource & LdapTemplate Definicija graha

ContextSource koristi se za stvaranje LdapTemplate. Vidjet ćemo upotrebu ContextSource tijekom autentifikacije korisnika u sljedećem odjeljku:

@Bean public LdapContextSource contextSource () {LdapContextSource contextSource = new LdapContextSource (); contextSource.setUrl (env.getRequiredProperty ("ldap.url")); contextSource.setBase (env.getRequiredProperty ("ldap.partitionSuffix")); contextSource.setUserDn (env.getRequiredProperty ("ldap.principal")); contextSource.setPassword (env.getRequiredProperty ("ldap.password")); povratak contextSource; }

LdapTemplate koristi se za stvaranje i izmjenu LDAP unosa:

@Bean public LdapTemplate ldapTemplate () {return new LdapTemplate (contextSource ()); }

4.2. Autentifikacija korisnika

Primijenimo sada jednostavan logički dio za autentifikaciju postojećeg korisnika:

javna void provjera autentičnosti (korisničko ime niza, lozinka niza) {contextSource .getContext ("cn =" + korisničko ime + ", ou = korisnici," + env.getRequiredProperty ("ldap.partitionSuffix"), lozinka); }

4.3. Stvaranje korisnika

Dalje, kreirajmo novog korisnika i pohranimo SHA hash lozinke u LDAP.

U vrijeme provjere autentičnosti, LDAP poslužitelj generira SHA hash isporučene lozinke i uspoređuje je s pohranjenom:

public void create (String username, String password) {Name dn = LdapNameBuilder .newInstance () .add ("ou", "users") .add ("cn", username) .build (); DirContextAdapter context = novi DirContextAdapter (dn); context.setAttributeValues ​​("objectclass", novi String [] {"top", "person", "organisationPerson", "inetOrgPerson"}); context.setAttributeValue ("cn", korisničko ime); context.setAttributeValue ("sn", korisničko ime); context.setAttributeValue ("userPassword", digestSHA (lozinka)); ldapTemplate.bind (kontekst); }

sažetakSHA () je prilagođena metoda koja vraća Base64 kodirani niz SHA hasha isporučene lozinke.

Napokon, vezati() metoda LdapTemplate koristi se za stvaranje unosa na LDAP poslužitelju.

4.4. Izmjena korisnika

Postojećeg korisnika ili unos možemo izmijeniti sljedećom metodom:

javna praznina modificirati (korisničko ime niza, lozinka niza) {Ime dn = LdapNameBuilder.newInstance () .add ("ou", "users") .add ("cn", korisničko ime) .build (); DirContextOperations context = ldapTemplate.lookupContext (dn); context.setAttributeValues ​​("objectclass", novi String [] {"top", "person", "organisationPerson", "inetOrgPerson"}); context.setAttributeValue ("cn", korisničko ime); context.setAttributeValue ("sn", korisničko ime); context.setAttributeValue ("userPassword", digestSHA (lozinka)); ldapTemplate.modifyAttributes (kontekst); }

The lookupContext () metoda koristi se za pronalaženje isporučenog korisnika.

4.5. Pretraga korisnika

Postojeće korisnike možemo pretraživati ​​pomoću filtara za pretraživanje:

pretraživanje javnog popisa (korisničko ime niza) {return ldapTemplate .search ("ou = users", "cn =" + korisničko ime, (AttributesMapper) attrs -> (String) attrs.get ("cn"). get ()); }

The AtributiMapper koristi se za dobivanje željene vrijednosti atributa iz pronađenih unosa. Interno, Proljeće LdapTemplate poziva na AtributiMapper za sve pronađene unose i stvara popis vrijednosti atributa.

5. Ispitivanje

test opruge-ldap pruža ugrađeni LDAP poslužitelj zasnovan na ApacheDS 1.5.5. Da bismo ugrađeni LDAP poslužitelj postavili za testiranje, moramo konfigurirati sljedeći Spring bean:

@Bean public TestContextSourceFactoryBean testContextSource () {TestContextSourceFactoryBean contextSource = new TestContextSourceFactoryBean (); contextSource.setDefaultPartitionName (env.getRequiredProperty ("ldap.partition")); contextSource.setDefaultPartitionSuffix (env.getRequiredProperty ("ldap.partitionSuffix")); contextSource.setPrincipal (env.getRequiredProperty ("ldap.principal")); contextSource.setPassword (env.getRequiredProperty ("ldap.password")); contextSource.setLdifFile (resourceLoader.getResource (env.getRequiredProperty ("ldap.ldiffile"))); contextSource.setPort (Integer.valueOf (env.getRequiredProperty ("ldap.port"))); povratak contextSource; }

Isprobajmo metodu pretraživanja korisnika s JUnit-om:

@Test javna praznina givenLdapClient_whenCorrectSearchFilter_thenEntriesReturned () {Popis korisnika = ldapClient .search (SEARCH_STRING); assertThat (users, Matchers.containsInAnyOrder (USER2, USER3)); }

6. Zaključak

U ovom smo članku predstavili Spring LDAP API-je i razvili jednostavne metode za provjeru autentičnosti korisnika, pretraživanje korisnika, izradu i izmjenu korisnika na LDAP poslužitelju.

Kao i uvijek pun izvorni kod dostupan je u ovom projektu Github. Testovi se kreiraju pod Maven profilom "live" i stoga se mogu pokrenuti pomoću opcije "-P live".


$config[zx-auto] not found$config[zx-overlay] not found