סקירת LDAP באביב

1. סקירה כללית

שרתי ספריות LDAP הם מאגרי נתונים היררכיים המותאמים לקריאה. בדרך כלל הם משמשים לאחסון מידע הקשור למשתמש הנדרש לצורך אימות והרשאת משתמשים.

במאמר זה נחקור את ממשקי ה- API של Spring LDAP כדי לאמת ולחפש משתמשים, כמו גם ליצור ולשנות משתמשים בשרת הספריות. ניתן להשתמש באותה קבוצה של ממשקי API לניהול כל סוג אחר של ערכים ב- LDAP.

2. תלות Maven

נתחיל בהוספת תלות Maven הנדרשת:

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

את הגרסה האחרונה של תלות זו ניתן למצוא ב- spring-ldap-core.

3. הכנת נתונים

לצורך מאמר זה, בואו ניצור תחילה את ערך LDAP הבא:

ou = משתמשים, dc = דוגמה, dc = com (objectClass = organisationalUnit)

מתחת לצומת זה, ניצור משתמשים חדשים, נשנה משתמשים קיימים, נאמת משתמשים קיימים ונחפש מידע.

4. ממשקי API של אביב LDAP

4.1. ContextSource & LdapTemplate הגדרת שעועית

ContextSource משמש ליצירת ה- LdapTemplate. נראה את השימוש ב- ContextSource במהלך אימות המשתמשים בסעיף הבא:

@Bean ציבורי LdapContextSource contextSource () {LdapContextSource contextSource = 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")); להחזיר contextSource; }

LdapTemplate משמש ליצירה ושינוי של ערכי LDAP:

@Bean ציבורי LdapTemplate ldapTemplate () {להחזיר LdapTemplate חדש (contextSource ()); }

4.2. אימות משתמש

בואו עכשיו נשתמש בפיסת לוגיקה פשוטה לאימות משתמש קיים:

אימות חלל ציבורי (שם משתמש מחרוזת, סיסמת מחרוזת) {contextSource .getContext ("cn =" + שם משתמש + ", ou = משתמשים," + env.getRequiredProperty ("ldap.partitionSuffix"), סיסמה); }

4.3. יצירת משתמשים

לאחר מכן, בואו ניצור משתמש חדש ונאחסן חשיש SHA של הסיסמה ב- LDAP.

בזמן האימות, שרת LDAP מייצר את ה- SHA של הסיסמה שסופקה ומשווה אותה לזו המאוחסנת:

בטל ציבורי ליצור (שם משתמש מחרוזת, סיסמת מחרוזת) {שם dn = LdapNameBuilder .newInstance () .add ("ou", "משתמשים") .add ("cn", שם משתמש) .build (); הקשר DirContextAdapter = DirContextAdapter חדש (dn); context.setAttributeValues ​​("objectclass", מחרוזת חדשה [] {"top", "person", "organizationalPerson", "inetOrgPerson"}); context.setAttributeValue ("cn", שם משתמש); context.setAttributeValue ("sn", שם משתמש); context.setAttributeValue ("userPassword", digestSHA (סיסמה)); ldapTemplate.bind (הקשר); }

digestSHA () היא שיטה מותאמת אישית שמחזירה את מחרוזת ה- Base64 המקודדת של ה- Hash של הסיסמה שסופקה.

סוף - סוף, ה לִקְשׁוֹר() שיטה של LdapTemplate משמש ליצירת ערך בשרת LDAP.

4.4. שינוי משתמש

אנו יכולים לשנות משתמש או ערך קיים בשיטה הבאה:

שינוי חלל ציבורי (שם משתמש מחרוזת, סיסמת מחרוזת) {שם dn = LdapNameBuilder.newInstance () .add ("ou", "משתמשים") .add ("cn", שם משתמש) .build (); DirContextOperations context = ldapTemplate.lookupContext (dn); context.setAttributeValues ​​("objectclass", מחרוזת חדשה [] {"top", "person", "organizationalPerson", "inetOrgPerson"}); context.setAttributeValue ("cn", שם משתמש); context.setAttributeValue ("sn", שם משתמש); context.setAttributeValue ("userPassword", digestSHA (סיסמה)); ldapTemplate.modifyAttributes (הקשר); }

ה lookupContext () השיטה משמשת לאיתור המשתמש שסופק.

4.5. חיפוש משתמשים

אנו יכולים לחפש משתמשים קיימים באמצעות מסנני חיפוש:

חיפוש ברשימה ציבורית (שם משתמש מחרוזת) {החזר ldapTemplate .search ("ou = משתמשים", "cn =" + שם משתמש, (AttributesMapper) attrs -> (String) attrs.get ("cn"). get ()); }

ה מאפייני תכונות משמש לקבלת ערך המאפיין הרצוי מהערכים שנמצאו. פנימית, אביב LdapTemplate קוראת ל מאפייני תכונות עבור כל הערכים שנמצאו ויוצר רשימה של ערכי התכונות.

5. בדיקות

אביב-ldap-test מספק שרת LDAP מוטבע המבוסס על ApacheDS 1.5.5. כדי להגדיר את שרת ה- LDAP המובנה לבדיקה, עלינו להגדיר את שעועית האביב הבאה:

@Bean TestContextSourceFactory ציבורי Bean testContextSource () {TestContextSourceFactoryBean contextSource = 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"))); להחזיר contextSource; }

בואו לבדוק את שיטת חיפוש המשתמשים שלנו עם JUnit:

@Test ציבורי בטל givenLdapClient_whenCorrectSearchFilter_thenEntriesReturned () {רשימה משתמשים = ldapClient .search (SEARCH_STRING); assertThat (משתמשים, Matchers.containsInAnyOrder (USER2, USER3)); }

6. מסקנה

במאמר זה הצגנו ממשקי API של Spring LDAP ופיתחנו שיטות פשוטות לאימות משתמשים, חיפוש משתמשים, יצירת משתמשים ושינוי בשרת LDAP.

כמו תמיד קוד המקור המלא זמין בפרויקט Github זה. הבדיקות נוצרות תחת פרופיל Maven "חי" ולכן ניתן להריץ באמצעות האפשרות "-P live".


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