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“.