Jarný prehľad LDAP

1. Prehľad

Adresárske servery LDAP sú hierarchické úložiská údajov optimalizované na čítanie. Spravidla sa používajú na ukladanie informácií súvisiacich s používateľmi, ktoré sú potrebné na autentifikáciu a autorizáciu používateľa.

V tomto článku preskúmame jarné rozhrania API LDAP na autentifikáciu a vyhľadávanie používateľov, ako aj na vytváranie a úpravy používateľov v adresárovom serveri. Rovnaká sada API sa dá použiť na správu ľubovoľného iného typu položiek v LDAP.

2. Maven závislosti

Začnime pridaním požadovanej závislosti Maven:

 org.springframework.ldap spring-ldap-core 2.3.1.RELEASE 

Najnovšiu verziu tejto závislosti nájdete na stránke spring-ldap-core.

3. Príprava údajov

Na účely tohto článku si najskôr vytvorme nasledujúci záznam LDAP:

ou = používatelia, dc = príklad, dc = com (objectClass = organizačná jednotka)

V tomto uzle budeme vytvárať nových používateľov, upravovať existujúcich používateľov, autentifikovať existujúcich používateľov a vyhľadávať informácie.

4. Jarné rozhrania API LDAP

4.1. ContextSource & LdapTemplate Definícia fazule

ContextSource sa používa na vytvorenie súboru LdapTemplate. Uvidíme využitie ContextSource počas autentifikácie užívateľa v ďalšej časti:

@Bean public LdapContextSource contextSource () {LdapContextSource contextSource = nový 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")); návrat contextSource; }

LdapTemplate sa používa na vytváranie a úpravy záznamov LDAP:

@Bean public LdapTemplate ldapTemplate () {vrátiť nový LdapTemplate (contextSource ()); }

4.2. Autentifikácia užívateľa

Poďme teraz implementovať jednoduchú logiku na autentifikáciu existujúceho používateľa:

public void authenticate (meno používateľa reťazca, heslo reťazca) {contextSource .getContext ("cn =" + meno používateľa + ", ou = používatelia," + env.getRequiredProperty ("ldap.partitionSuffix"), heslo); }

4.3. Tvorba používateľov

Ďalej vytvorme nového používateľa a uložme SHA hash hesla do LDAP.

V čase autentifikácie server LDAP generuje hash SHA dodaného hesla a porovnáva ho s uloženým:

public void create (String username, String password) {Name dn = LdapNameBuilder .newInstance () .add ("ou", "users") .add ("cn", username) .build (); DirContextAdapter kontext = nový DirContextAdapter (dn); context.setAttributeValues ​​("objectclass", new String [] {"top", "person", "organizationPerson", "inetOrgPerson"}); context.setAttributeValue ("cn", používateľské meno); context.setAttributeValue ("sn", používateľské meno); context.setAttributeValue ("userPassword", digestSHA (heslo)); ldapTemplate.bind (kontext); }

digestSHA () je vlastná metóda, ktorá vracia reťazec kódovaný pomocou Base64 hash SHA dodaného hesla.

Nakoniec bind () metóda LdapTemplate sa používa na vytvorenie záznamu na serveri LDAP.

4.4. Úprava používateľa

Existujúceho používateľa alebo položku môžeme upraviť nasledujúcim spôsobom:

public void modify (meno používateľa reťazca, heslo reťazca) {meno dn = LdapNameBuilder.newInstance () .add ("ou", "používatelia") .add ("cn", meno používateľa) .build (); DirContextOperations context = ldapTemplate.lookupContext (dn); context.setAttributeValues ​​("objectclass", new String [] {"top", "person", "organizationPerson", "inetOrgPerson"}); context.setAttributeValue ("cn", používateľské meno); context.setAttributeValue ("sn", používateľské meno); context.setAttributeValue ("userPassword", digestSHA (heslo)); ldapTemplate.modifyAttributes (kontext); }

The lookupContext () metóda sa používa na vyhľadanie dodávaného používateľa.

4.5. Vyhľadávanie používateľov

Existujúcich používateľov môžeme vyhľadať pomocou filtrov vyhľadávania:

vyhľadávanie vo verejnom zozname (meno používateľa v reťazci) {return ldapTemplate .search ("ou = users", "cn =" + meno používateľa, (AttributesMapper) attrs -> (reťazec) attrs.get ("cn"). get ()); }

The AttributesMapper sa používa na získanie požadovanej hodnoty atribútu z nájdených záznamov. Vnútorne jar LdapTemplate sa odvoláva na AttributesMapper pre všetky nájdené záznamy a vytvorí zoznam hodnôt atribútov.

5. Testovanie

test jar-ldap poskytuje zabudovaný server LDAP založený na ApacheDS 1.5.5. Ak chcete nastaviť zabudovaný server LDAP na testovanie, musíme nakonfigurovať nasledujúcu jarnú fazuľu:

@Bean public TestContextSourceFactoryBean testContextSource () {TestContextSourceFactoryBean contextSource = nový 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"))); návrat contextSource; }

Vyskúšajme našu metódu vyhľadávania používateľov s JUnit:

@Test public void givenLdapClient_whenCorrectSearchFilter_thenEntriesReturned () {List users = ldapClient .search (SEARCH_STRING); assertThat (používatelia, Matchers.containsInAnyOrder (USER2, USER3)); }

6. Záver

V tomto článku sme predstavili Spring LDAP API a vyvinuli jednoduché metódy pre autentifikáciu používateľov, vyhľadávanie používateľov, vytváranie a modifikáciu používateľov na serveri LDAP.

Celý zdrojový kód je ako vždy k dispozícii v tomto projekte Github. Testy sa vytvárajú pod profilom Maven „live“, a preto ich možno spustiť pomocou možnosti „-P live“.


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