Главная » Spring » Аутентификация пользователей Spring

0

Каждое приложение имеет свои особенности. Эта истина осо- бенно ярко проявляется в том, как каждое приложение хранит информацию о пользователях. Иногда для этого используется ре- ляционная база данных. Иногда каталог LDAP. Некоторые прило- жения опираются на децентрализованные системы аутентификации пользователей. А некоторые могут использовать сразу несколько стратегий.

К счастью, фреймворк Spring Security обладает достаточной гиб- костью и способен использовать практически любую стратегию аутентификации. Spring Security готов поддержать многие механиз- мы аутентификации, включая аутентификацию пользователей при использовании:

# репозитория в памяти (настраиваемого в контексте приложе- ния Spring);

#  репозитория на основе JDBC;

#  репозитория на основе LDAP;

# децентрализованных систем идентификации OpenID;

# централизованной системы аутентификации (Central Authen- tication System, CAS);

#  сертификатов X.509;

#  провайдеров на основе JAAS.

Если ни один из этих вариантов не соответствует вашим потреб- ностям, легко можно реализовать собственную стратегию аутенти- фикации и внедрить ее.

Рассмотрим поближе некоторые из наиболее часто используемых способов аутентификации, поддерживаемых фреймворком Spring Security.

Настройка репозитория в памяти

Простейшим из имеющихся способов аутентификации является объявление информации о пользователях непосредственно в файле конфигурации Spring. Делается это за счет настройки службы уче- та пользователей с помощью элемента <user-service>, имеющегося в пространстве имен Spring Security:

<user-service  id="userService">

<user  name="habuma"  password="letmein" authorities="ROLE_SPITTER,ROLE_ADMIN"/>

<user  name="twoqubed"  password="longhorns" authorities="ROLE_SPITTER"/>

<user   name="admin"   password="admin" authorities="ROLE_ADMIN"/>

</user-service>

Функции службы учета пользователей фактически выполняет объект доступа к данным, который отыскивает информацию по ука- занному идентификатору. В случае с элементом <user-service> эта информация о пользователях объявляется внутри элемента <user- service>. Каждому пользователю, который может пользоваться при- ложением, соответствует отдельный элемент <user>. Атрибуты name и password определяют, соответственно, имя пользователя и пароль. А в атрибуте authorities  указывается список привилегий, перечис-

ленных через запятую, которые определяют доступные пользовате- лю операции.

Напомню, что выше (в разделе 10.2.3) в конфигурации Spring Security мы разрешили доступ ко всем URL только пользователям с привилегией ROLE_SPITTER. В данном случае эту привилегию полу- чают пользователи habuma и twoqubed, а пользователь admin – нет.

Теперь служба учета пользователей готова к работе и ожидает возможности отыскать информацию для аутентификации. Осталось лишь внедрить ее в подсистему аутентификации Spring Security:

<authentication-manager>

<authentication-provider user-service-ref="userService" />

</authentication-manager>

Элемент <authentication-manager> регистрирует компонент подси- стемы аутентификации. Точнее, он регистрирует экземпляр Provider- Manager, который делегирует функции аутентификации пользовате- лей одной или более провайдерам аутентификации. В данном случае используется провайдер, опирающийся на службу учета пользова- телей. В приложении уже имеется служба учета пользователей. Поэтому осталось лишь внедрить ее, указав в атрибуте user-service элемента    <authentication-provider>.

В этом примере провайдер аутентификации и служба учета поль- зователей были объявлены отдельно друг от друга, а затем связа- ны между собой. Однако существует также возможность встроить службу учета пользователей непосредственно в провайдер аутенти- фикации:

<authentication-provider>

<user-service  id="userService">

<user  name="habuma"  password="letmein" authorities="ROLE_SPITTER,ROLE_ADMIN"/>

</user-service>

</authentication-provider>

Способ встраивания элемента <user-service> в элемент <authentica- tion-provider> не имеет каких-либо существенных преимуществ, но для кого-то такой способ настройки может выглядеть более логичным.

Прием определения информации о пользователях в контексте приложения Spring удобно использовать во время тестирования,

когда вы только приступаете к настройке системы безопасности приложения. Но в условиях нормальной эксплуатации приложения этот способ никуда не годится. Чаще всего информация о пользова- телях сохраняется в базе данных или на сервере каталогов. Поэтому далее посмотрим, как зарегистрировать службу учета пользователей, которая ищет информацию в реляционной базе данных.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии