Backend
October 11, 2023

Аутентификация, авторизация и Spring Security  

Ты наверняка пользуешься многими сайтами и приложениями каждый день. Это и социальные сети вроде ВК/Инстаграма, и интернет-магазины, где можно купить одежду, электронику и т. п. Чтобы все эти сервисы работали, нужно обеспечить их безопасность и защиту от взлома.

Представь, что кто-то взломал ВКонтакте и получил доступ к переписке и личным данным миллионов пользователей. Или на Ozon пробрались мошенники и украли платежные данные людей. Без защиты такие ситуации вполне возможны.

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

Как защищают сайты и приложения

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

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

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

Настройка проекта

Чтобы использовать Spring Security, нужно подключить её к проекту. Рассмотрим как это сделать на примере проекта на Spring Boot (инструмент для создания веб-приложений).

Сначала создаём проект Spring Boot, используя Spring Initializr - специальный сервис, который автоматически сгенерирует базу проекта со всеми нужными настройками.

Далее в файл зависимостей добавляем spring-boot-starter-security - так мы подключим Spring Security к нашему проекту.

Всё, теперь можно писать код для аутентификации и авторизации! Разберём основные варианты.

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

Пользователей на сайте можно аутентифицировать разными способами. Рассмотрим пару примеров.

Простой вариант - хранить данные о пользователях (логины и пароли) прямо в коде. Но так небезопасно!

Лучше использовать базу данных - тогда можно гибко управлять пользователями через админку. Добавлять, удалять, менять роли.

Ещё вариант - создать специальный сервис для проверки пользователей. Это позволит вынести всю логику аутентификации в отдельный кусок кода и при необходимости легко заменить его.

Также можно использовать готовые сервисы вроде OAuth от Гугла или ВК - тогда пользователи смогут входить через свои аккаунты в соцсетях. Удобно и безопасно.

Авторизация пользователей

Аутентификация определяет, кто вошёл на сайт. А авторизация - что он может делать.

Один из вариантов - ограничивать доступ к отдельным URL-адресам на сайте. Например, страница настроек доступна только администраторам.

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

Удобный способ - использовать аннотации в коде, например @PreAuthorize. Пишем прямо над нужным методом, кто может его использовать.

Так Spring Security позволяет гибко настроить авторизацию.

Какие итоги?

Как видишь, защита веб-приложений - это комплексная тема. Чтобы сайт был надёжно защищён, нужно правильно организовать как аутентификацию, так и авторизацию (и не только). Современные фреймворки вроде Spring Security упрощают эту задачу, предоставляя готовые инструменты для создания безопасных веб-приложений, но все равно придется попотеть, если твоей целью является обеспечение максимальной безопасности.