Статьи

Интеграция Spring Boot Application с Amazon Cognito

В этой статье мы покажем, как использовать сервис 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.

Создание пула пользователей

Amazon Cognito

Создание приложения-клиента

Amazon Cognito

Настройка приложения-клиента

Amazon Cognito

Настройка доменного имени для пула пользователей

Amazon Cognito

Создание тестовых пользователей

Amazon Cognito

Вот несколько шагов, которые нужно выполнить для настройки пула пользователей Cognito и клиента приложения.

Настройка Spring Boot Application

Мы будем использовать клиентскую библиотеку OAuth, включенную в Spring Security 5 и ее интеграцию со Spring Boot .

Обновите файл pom.xml для добавления зависимости клиента OAuth.

Добавьте следующую зависимость в ваш pom.xml чтобы получить возможность получить клиентскую библиотеку OAuth

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-страницы для отображения подробностей аутентифицированного пользователя

Мы добавили файл index.html чтобы показать подробности вошедшего в систему пользователя с использованием диалектов безопасности Thymeleaf-Spring, как показано ниже:

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 для аутентификации, и после успешной аутентификации вы попадете на страницу приложения, которая выглядит примерно так:

Amazon Cognito

Полный код приложения можно найти здесь . В последующих статьях мы рассмотрим настройку объекта Principal, использование конечной точки информации о пользователе, управление ролями с помощью безопасности Spring, а также рассмотрим, как одностраничные приложения могут использовать Cognito.

Опубликовано на Java Code Geeks с разрешения Мохамеда Санауллы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Интеграция Spring Boot Application с Amazon Cognito

Мнения, высказанные участниками Java Code Geeks, являются их собственными.