Перейти к основному содержимому

Введение в Spring Security LDAP

· 3 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

1. Обзор

В этом кратком руководстве мы узнаем, как настроить Spring Security LDAP.

Прежде чем мы начнем, примечание о том, что такое LDAP — это сокращение от Lightweight Directory Access Protocol, и это открытый, независимый от поставщика протокол для доступа к службам каталогов по сети.

2. Зависимость от Maven

Во-первых, давайте взглянем на зависимости maven, которые нам нужны:

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>

<dependency>
<groupId>org.apache.directory.server</groupId>
<artifactId>apacheds-server-jndi</artifactId>
<version>1.5.5</version>
</dependency>

Примечание. Мы использовали ApacheDS в качестве сервера LDAP, который является расширяемым и встраиваемым сервером каталогов.

3. Конфигурация Java

Далее давайте обсудим нашу конфигурацию Spring Security Java:

public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userSearchBase("ou=people")
.userSearchFilter("(uid={0})")
.groupSearchBase("ou=groups")
.groupSearchFilter("member={0}")
.contextSource()
.root("dc=foreach,dc=com")
.ldif("classpath:users.ldif");
}
}

Это, конечно, только часть конфигурации, относящаяся к LDAP — полную конфигурацию Java можно найти здесь .

4. XML-конфигурация

Теперь давайте посмотрим на соответствующую конфигурацию XML:

<authentication-manager>
<ldap-authentication-provider
user-search-base="ou=people"
user-search-filter="(uid={0})"
group-search-base="ou=groups"
group-search-filter="(member={0})">
</ldap-authentication-provider>
</authentication-manager>

<ldap-server root="dc=foreach,dc=com" ldif="users.ldif"/>

Опять же, это только часть конфигурации — часть, относящаяся к LDAP; полную конфигурацию XML можно найти здесь .

5. Формат обмена данными LDAP

Данные LDAP могут быть представлены с использованием формата обмена данными LDAP (LDIF) — вот пример наших пользовательских данных:

dn: ou=groups,dc=foreach,dc=com
objectclass: top
objectclass: organizationalUnit
ou: groups

dn: ou=people,dc=foreach,dc=com
objectclass: top
objectclass: organizationalUnit
ou: people

dn: uid=foreach,ou=people,dc=foreach,dc=com
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Jim Beam
sn: Beam
uid: foreach
userPassword: password

dn: cn=admin,ou=groups,dc=foreach,dc=com
objectclass: top
objectclass: groupOfNames
cn: admin
member: uid=foreach,ou=people,dc=foreach,dc=com

dn: cn=user,ou=groups,dc=foreach,dc=com
objectclass: top
objectclass: groupOfNames
cn: user
member: uid=foreach,ou=people,dc=foreach,dc=com

6. Использование Spring Boot

При работе над проектом Spring Boot мы также можем использовать зависимость Spring Boot Starter Data Ldap , которая автоматически будет использовать для нас LdapContextSource и LdapTemplate .

Чтобы включить автоконфигурацию, нам нужно убедиться, что у нас есть spring-boot-starter-data-ldap Starter или spring-ldap-core , определенные как зависимость в нашем pom.xml:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-ldap</artifactId>
</dependency>

Для подключения к LDAP нам необходимо указать параметры подключения в application.properties:

spring.ldap.url=ldap://localhost:18889
spring.ldap.base=dc=example,dc=com
spring.ldap.username=uid=admin,ou=system
spring.ldap.password=secret

Подробнее об автонастройке Spring Data LDAP можно прочитать в официальной документации . Spring Boot добавляет LdapAutoConfiguration , который заботится об инструментарии LdapTemplate , который затем можно внедрить в требуемый класс обслуживания:

@Autowired
private LdapTemplate ldapTemplate;

7. Приложение

Наконец, вот наше простое приложение:

@Controller
public class MyController {

@RequestMapping("/secure")
public String secure(Map<String, Object> model, Principal principal) {
model.put("title", "SECURE AREA");
model.put("message", "Only Authorized Users Can See This Page");
return "home";
}
}

8. Заключение

В этом кратком руководстве по Spring Security с LDAP мы узнали, как подготовить базовую систему с помощью LDIF и настроить безопасность этой системы.

Полную реализацию этого руководства можно найти в проекте GitHub — это проект на основе Eclipse, поэтому его легко импортировать и запускать как есть.