Управление идентификацией в Spring Boot с Twilio и Stormpath за 15 минут

Автор: | 04.08.2026

*первоначально опубликовано*

*автор*

*Мика Силверман*

*, евангелист разработчиков в Stormpath, API, который позволяет разработчикам добавлять аутентификацию, авторизацию и управление пользователями в любое веб- или мобильное приложение за считанные минуты. Мика создал приложение на Spring Boot, использующее Java Helper Library от Twilio и Stormpath для отправки уведомлений о входе в систему.*

Сегодня, примерно за 30 секунд, я смог настроить аккаунт Twilio и отправить себе текстовое сообщение с помощью httpie. Ещё несколько минут работы (менее пяти), и у меня было приложение на Spring Boot, делающее то же самое.

Примерно за те же пять минут вы можете настроить платформу управления идентификацией как услугу от Stormpath и полюбить аутентификацию.

Мы действительно живём в золотой век облачных сервисов, которые не требуют установки на локальный компьютер.

Практически всё, что вы могли представить себе в области компьютеров или других устройств за последние 15 лет, теперь можно подключить и создать прототип за считанные минуты. Я помню, как примерно в 2007 году (после выхода первого iPhone) вёл переговоры с брокером SMS-услуг. После заполнения кипы бумаг, ожидания около четырёх месяцев и обязательств по крупным финансовым затратам мы были готовы писать код для работы с SMS-шлюзом. Тогда это было чем-то загадочным.

Пробовали ли вы когда-нибудь самостоятельно реализовать управление идентификацией? Добавляли ли вы соль к хэшам? Или, признайтесь, хранили пароли в открытом виде, как все тогда.

В этой статье мы объединим Stormpath и Twilio. Вот сценарий: когда пользователь входит в систему с нового устройства, мы хотим отправить ему SMS-уведомление, чтобы он знал об этом. Это распространённая практика сегодня, чтобы держать людей в курсе активности на их аккаунтах. Если я получаю уведомление о том, что вход был выполнен с нового адреса, и это был не я, значит, мой аккаунт был скомпрометирован.

Для целей этой демонстрации мы будем считать доступ с нового IP-адреса как вход с нового устройства.

Код для этой статьи можно найти здесь.

Первым шагом является создание аккаунта Stormpath. Вы можете следовать нашей документации по быстрому старту здесь. Вот основные шаги:

— Зарегистрируйтесь на https://api.stormpath.com/register

— Перейдите по ссылке в письме с подтверждением

— Создайте API-ключ для доступа к API (сохраните его в: `~/.stormpath/apiKey.properties`)

Исходный код этого примера можно найти здесь.

Пока не беспокойтесь о настройке Twilio — она отключена по умолчанию. В следующем разделе мы интегрируем и включим Twilio.

Интеграция Stormpath с Spring Boot позволяет легко инициировать дополнительные действия до и после входа пользователя. Именно этот механизм мы будем использовать для отправки сообщений через Twilio позже. Пока мы просто убедимся, что обработчик после входа работает.

Для использования интеграции Stormpath с Spring Boot достаточно добавить одну зависимость:

В данном случае мы используем интеграцию Spring Boot + Web MVC + Thymeleaf, чтобы возвращать шаблоны Thymeleaf.

Для настройки нашего `postLoginHandler` нужно просто создать конфигурацию Spring Boot, которая предоставляет бин:

Вы можете запустить приложение Spring Boot следующим образом:

Теперь вы можете перейти по адресу: `http://localhost:8080/register` для создания аккаунта в Stormpath. Затем перейдите по адресу: `http://localhost:8080/login`. В логах вы должны увидеть примерно следующее:

Ура! Наш обработчик после входа работает.

В этом примере мы моделируем следующий сценарий: отправка текстового сообщения (SMS) пользователю всякий раз, когда он входит в систему с нового местоположения. Для этого нам нужен номер телефона пользователя. Нам также нужно хранить массив местоположений, с которых пользователь входил ранее, чтобы определить, является ли текущее местоположение новым.

Здесь на помощь приходит `CustomData` от Stormpath. Мы заранее понимали, что не сможем охватить все варианты использования данных пользователей, которые могут понадобиться нашим клиентам. Поэтому мы прикрепили 10 МБ свободных JSON-данных к каждому первоклассному объекту Stormpath, включая учётные записи пользователей. Это и есть `CustomData`.

Мы сохраняем информацию о пользователе следующим образом:

Вот как это выглядит в административной консоли Stormpath:

Мы вернёмся к тому, как настраивается этот `CustomData`, как только интегрируем Twilio.

У Twilio есть краткое руководство, которое позволит вам быстро начать работу.

Основные шаги следующие:

— Введите основную регистрационную информацию

— Введите свой номер телефона

— Запросите номер телефона Twilio

— Проверьте, что вы можете отправлять сообщения с номера Twilio на свой номер телефона

Убедитесь, что вы выполнили тесты и можете отправлять сообщения. Вы можете протестировать это самостоятельно из командной строки с помощью curl или httpie:

Теперь, когда вы знаете, что можете использовать свой аккаунт Twilio, добавление его в качестве зависимости в приложение Spring Boot не составит труда:

Ранее мы настроили приложение Spring Boot для выполнения действия после успешного входа пользователя. Это действие просто записывало некоторую информацию в лог. Теперь мы собираемся интегрировать возможность отправки сообщений через Twilio с помощью этого же обработчика после входа.

Строки 8 и 9 извлекают номер телефона пользователя и список адресов, с которых пользователь ранее входил в систему. Эта информация берётся из `CustomData` пользователя.

Предполагая, что вход осуществляется с нового местоположения, строка 18 сохраняет новый адрес обратно в `CustomData`, а строка 20 отправляет сообщение через Twilio.

`TwilioLoginMessageBuilder` определён в примере и использует fluent-интерфейс.

Метод `send`, использованный в строке 26 выше, сначала проверяет, правильно ли настроен Twilio, и, если да, пытается отправить сообщение:

Давайте запустим приложение и посмотрим его в действии!

Перейдя на главную страницу `http://localhost:8080`, у вас будет возможность войти в систему. Если вы посмотрите в лог, то увидите, что при первом входе вы *не* получаете сообщение, потому что для вас не сохранён номер телефона.

Следующее, что нужно сделать, — это установить номер телефона:

Теперь вы можете выйти и снова войти в систему, и вы должны получить уведомление от Twilio:

В этой статье мы использовали возможность обработчика после входа от Stormpath и объединили её с возможностью отправки SMS от Twilio, чтобы создать новую функциональность, превосходящую возможности этих двух платформ по отдельности.

Определённо, это золотой век для сервисов.

В репозитории с кодом для этой статьи есть ещё немного магии Spring Boot, включая динамическую загрузку `defaultLoginPostHandler` или `twilioLoginPostHandler` на основе настроек конфигурации. Чтобы использовать обработчик Twilio, просто установите свойство `twilio.enabled=true` в файле `application.properties`.

Теперь идите и соединяйте сервисы вместе для удовольствия и прибыли!

Заинтересованы в изучении дополнительной информации об аутентификации пользователей с помощью Spring Boot и Stormpath? У нас есть другие отличные ресурсы, которые вы можете изучить: