В этой статье мы покажем, как использовать сервис 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:9999cognito.rooturl=https://test-userpool.auth.eu-west-1.amazoncognito.comspring.security.oauth2.client.registration.cognito.provider=cognitospring.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-clientspring.security.oauth2.client.registration.cognito.authorization-grant-type=authorization_codespring.security.oauth2.client.registration.cognito.scope=email,openidspring.security.oauth2.client.registration.cognito.redirect-uri-template=${app.url}/login/oauth2/code/cognitospring.security.oauth2.client.provider.cognito.authorizationUri=${cognito.rooturl}/oauth2/authorizespring.security.oauth2.client.provider.cognito.tokenUri=${cognito.rooturl}/oauth2/tokenspring.security.oauth2.client.provider.cognito.jwkSetUri=https://cognito-idp.eu-west-1.amazonaws.com/eu-west-1_Mi1q5QPXa/.well-known/jwks.jsonspring.security.oauth2.client.provider.cognito.user-info-uri=${cognito.rooturl}/oauth2/userInfospring.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, являются их собственными. |