В этой статье мы покажем, как использовать сервис Amazon Cognito для аутентификации пользователей в приложении Spring Boot с использованием клиентской библиотеки OAuth 2.0, представленной в Spring Security 5.0 .
Что такое AWS Cognito?
Amazon Cognito — это сервис, предлагаемый AWS, который предоставляет услуги управления пользователями, такие как регистрация и вход, в дополнение к поддержке предоставления учетных данных для доступа к сервисам AWS. У него есть собственный поставщик удостоверений в дополнение к интеграции с поставщиками удостоверений, такими как Facebook, Google, SAML, OpenId.
Что в этом есть для разработчиков веб-приложений?
Разработчики веб-приложений (серверные / одностраничные приложения) и даже разработчики мобильных приложений могут загрузить регистрацию пользователей и аутентификацию в Amazon Cognito и сосредоточиться на реализации бизнес-требований.
Cognito поддерживает такие функции, как многофакторная аутентификация (MFA), проверка электронной почты и номера телефона, управление надежностью пароля. Он также поддерживает аутентификацию с другими поставщиками удостоверений, такими как Facebook, Google и пользовательские интеграции SAML, где cognito выступает в качестве адаптера для интеграции с ними.
Короче говоря, разработчики могут сосредоточиться на бизнес-функциях и позволить AWS обрабатывать регистрацию пользователей и аутентификацию.
Настройка Amazon Cognito
Cognito содержит два основных компонента:
- Пулы пользователей — которые используются для управления пользователями и идентификационными данными, управления клиентскими данными приложений (т. Е. Клиентов, которые будут использовать cognito для аутентификации)
- Пулы удостоверений — используются для предоставления учетных данных AWS для доступа к службам AWS.
Давайте настроим пул пользователей, а также создадим клиент приложения, который мы сможем использовать для связи с Cognito.
Создание пула пользователей
Создание приложения-клиента
Настройка приложения-клиента
Настройка доменного имени для пула пользователей
Создание тестовых пользователей
Вот несколько шагов, которые нужно выполнить для настройки пула пользователей Cognito и клиента приложения.
Настройка Spring Boot Application
Мы будем использовать клиентскую библиотеку OAuth, включенную в Spring Security 5 и ее интеграцию со Spring Boot .
Обновите файл pom.xml для добавления зависимости клиента OAuth.
Добавьте следующую зависимость в ваш
чтобы получить возможность получить клиентскую библиотеку OAuth pom.xml
1
2
3
4
|
< dependency > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-oauth2-client</ artifactId > </ dependency > |
Добавьте свойства, связанные с клиентом OAuth
Нам нужно определить некоторые свойства, связанные с регистрацией поставщика OAuth и настройкой поставщика OAuth. Следующие свойства должны быть добавлены:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
app.url=http: //localhost:9999 cognito.rooturl=https: //test-userpool.auth.eu-west-1.amazoncognito.com spring.security.oauth2.client.registration.cognito.provider=cognito spring.security.oauth2.client.registration.cognito.client-id=<client-id> spring.security.oauth2.client.registration.cognito.client-secret=<client-secret> spring.security.oauth2.client.registration.cognito.client-name=test-client spring.security.oauth2.client.registration.cognito.authorization-grant-type=authorization_code spring.security.oauth2.client.registration.cognito.scope=email,openid spring.security.oauth2.client.registration.cognito.redirect-uri-template=${app.url}/login/oauth2/code/cognito spring.security.oauth2.client.provider.cognito.authorizationUri=${cognito.rooturl}/oauth2/authorize spring.security.oauth2.client.provider.cognito.tokenUri=${cognito.rooturl}/oauth2/token spring.security.oauth2.client.provider.cognito.jwkSetUri=https: //cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Mi1q5QPXa/.well-known/jwks.json spring.security.oauth2.client.provider.cognito.user-info-uri=${cognito.rooturl}/oauth2/userInfo spring.security.oauth2.client.provider.cognito.userNameAttribute=username |
URI JWK построен на основе приведенных здесь рекомендаций.
Создание HTML-страницы для отображения подробностей аутентифицированного пользователя
Мы добавили файл
чтобы показать подробности вошедшего в систему пользователя с использованием диалектов безопасности Thymeleaf-Spring, как показано ниже: index.html
01
02
03
04
05
06
07
08
09
10
11
|
< div class = "container" > < div class = "row" > < div class = "col" > Authenticated successfully as [[${#authentication.name}]]< br /> Principal: [[${#authentication.principal}]] < div > < a th:href = "@{/logout}" class = "btn btn-primary" >Logout</ a > </ div > </ div > </ div > </ div > |
Тестирование интеграции
Просто запустите основной класс, и приложение начнет работать на http: // localhost: 9999 / . При переходе по этому URL вы будете перенаправлены на Cognito для аутентификации, и после успешной аутентификации вы попадете на страницу приложения, которая выглядит примерно так:
Полный код приложения можно найти здесь . В последующих статьях мы рассмотрим настройку объекта Principal, использование конечной точки информации о пользователе, управление ролями с помощью безопасности Spring, а также рассмотрим, как одностраничные приложения могут использовать Cognito.
Опубликовано на Java Code Geeks с разрешения Мохамеда Санауллы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Интеграция Spring Boot Application с Amazon Cognito Мнения, высказанные участниками Java Code Geeks, являются их собственными. |