Как защитить Spring Boot с помощью аутентификации и авторизации JWT
Здравствуйте, учащиеся, здесь мы собираемся узнать о реализации безопасности Spring с Spring Boot3.0 и JWT. Это продолжение Spring Security, часть 1: здесь мы обсуждали реализацию Spring Security на основе роли, здесь мы обсудим, как реализовать JWT.
JWT (веб-токены JSON) — это стандарт для безопасного представления претензий между двумя сторонами. Это компактное, безопасное для URL-адресов средство представления требований, которые должны быть переданы между двумя сторонами. JWT состоит из трех частей: заголовка, полезной нагрузки и подписи.

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

Ниже приведен обзор того, как аутентификация и авторизация JWT работают в Spring Boot :
- Аутентификация пользователя: когда пользователь входит в систему, сервер проверяет учетные данные пользователя, такие как имя пользователя и пароль. Если учетные данные верны, сервер создает JWT для пользователя и возвращает его клиенту.
- Создание JWT: сервер создает JWT, кодируя информацию об удостоверении пользователя и другие необходимые данные, такие как время истечения срока действия, в объект JSON. Затем объект JSON подписывается с помощью секретного ключа или пары открытый/закрытый ключ.
- Хранилище токенов: клиент хранит JWT локально, обычно в файле cookie или локальном хранилище.
- Авторизация: для каждого последующего запроса клиент отправляет JWT в заголовке запроса. Сервер проверяет подпись JWT и декодирует ее содержимое для извлечения идентификационной информации пользователя и других сведений. На основе этой информации сервер может авторизовать пользователя для доступа к определенным ресурсам или выполнения определенных действий.
- Проверка токена: сервер также может проверить JWT, чтобы убедиться, что он не был подделан и срок его действия не истек. Если токен недействителен, сервер может отклонить запрос или попросить пользователя снова войти в систему.
Шаг 1. Добавьте зависимости JWT

Шаг 2. Создайте конечную точку для аутентификации и создания JWT.


В методе CreateToken мы создаем токен, устанавливая претензии, тему, дату выпуска и истечения срока действия, подпись.
Шаг 3. Создайте фильтр для проверки JWT

создать класс для фильтра и расширить с помощью OncePerRequestFilter, переопределить метод doFilterInternal и вызвать токен авторизации из заголовка. Подтвердите токен, извлекая имя пользователя и дату истечения срока действия из токена. Этот фильтр используется для проверки токена JWT для каждого вызова API.
Шаг 4. Добавьте конфигурацию для авторизации вызовов API

Создайте класс и добавьте метод для авторизации, в приведенном выше коде предоставляется доступ к конечным точкам «/products/new», «/products/authenticate» для всех пользователей, для конечной точки «/products/**» только аутентифицированные пользователи с действительным JWT могут доступ.
Тестирование реализации
Аутентификация и генерация токена

Скопируйте сгенерированный токен и добавьте его в другой вызов API, я получаю доступ к приведенному ниже API с учетными данными администратора.

Если мы попытаемся получить доступ к API с учетными данными администратора, доступ к которым может получить только пользователь, получим ошибку 403 Forbidden.


Примечание. Если вам нужен рабочий код github для этой реализации, подпишитесь на меня и прокомментируйте свой идентификатор электронной почты. Я отправлю ссылку на исходный код на вашу электронную почту.
Часть 1: Доступ на основе ролей Spring Security с Spring Boot
Обратитесь по ссылкам для других концепций Spring Boot:
Учебное пособие по весеннему АОП
Учебник по логированию Spring Boot
Централизованная конфигурация в Spring Boot
Наиболее часто используемые аннотации Hibernate
Важные шаблоны проектирования микросервисов для собеседований