Автор оригинала: Adrian Precub.
1. введение
В этом уроке мы рассмотрим, как мы можем использовать поддержку OAuth 2.0 Spring Security для аутентификации с помощью Amazon Cognito .
По пути мы кратко рассмотрим, что такое Amazon Cognito и что это за OAuth 2.0 потоки, которые он поддерживает.
В конце концов, у нас будет простое одностраничное приложение. Ничего особенного.
2. Что Такое Amazon Cognito?
Cognito-это служба идентификации пользователей и синхронизации данных, которая позволяет нам легко управлять пользовательскими данными для наших приложений на нескольких устройствах.
С Amazon Cognito мы можем:
- создание, аутентификация и авторизация пользователей для наших приложений
- создавайте удостоверения для пользователей наших приложений, которые используют другие общедоступные поставщики удостоверений личности , такие как Google, Facebook или Twitter
- сохраните пользовательские данные нашего приложения в парах ключ-значение
3. Настройка
3.1. Настройка Amazon Cognito
В качестве поставщика удостоверений Cognito поддерживает authorization_code, неявные и client_credentials гранты . Для наших целей давайте настроим все так, чтобы использовать тип authorization_code grant.
Во-первых, нам нужно немного настроить Cognito:
- Создание пула пользователей
- Добавить пользователя – мы будем использовать этого пользователя для входа в наше весеннее приложение
- Создание клиента Приложения
- Настройка клиента приложения
В конфигурации клиента приложения убедитесь, что URL-адрес обратного вызова соответствует redirect-uri из файла конфигурации Spring. В нашем случае это будет:
http://localhost:8080/login/oauth2/code/cognito
Разрешенный поток OAuth должен быть Предоставлением кода авторизации. Затем на той же странице , нам нужно установить Разрешенную область OAuth в openid.
Чтобы перенаправить пользователя на пользовательскую страницу входа в систему Cognito, нам также необходимо добавить домен Пула пользователей .
3.2. Установка пружины
Поскольку мы хотим использовать вход в систему OAuth 2.0, нам нужно будет добавить соответствующие зависимости безопасности Spring в наше приложение:
org.springframework.security spring-boot-starter-security-oauth2-client org.springframework.security spring-security-oauth2-jose
А потом нам понадобится какая-то конфигурация, чтобы связать все вместе:
spring: security: oauth2: client: registration: cognito: clientId: clientId clientSecret: clientSecret scope: openid redirect-uri: http://localhost:8080/login/oauth2/code/cognito clientName: clientName provider: cognito: issuerUri: https://cognito-idp.{region}.amazonaws.com/{poolId} user-name-attribute: cognito:username
В приведенной выше конфигурации свойства ClientID , clientSecret , имя клиента и issuerUri должны быть заполнены в соответствии с нашим Пулом пользователей и Клиентом приложений , созданным на AWS.
И с этим мы должны создать Spring и Amazon Cognito! Остальная часть учебника определяет конфигурацию безопасности нашей точки доступа, а затем просто связывает несколько свободных концов.
3.3. Конфигурация безопасности Spring
Теперь мы добавим класс конфигурации безопасности:
@Configuration public class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.csrf() .and() .authorizeRequests(authz -> authz.mvcMatchers("/") .permitAll() .anyRequest() .authenticated()) .oauth2Login() .and() .logout() .logoutSuccessUrl("/"); } }
Здесь мы сначала указали, что нам нужна защита от атак CSRF, а затем разрешили всем доступ к нашей целевой странице. После этого мы добавили вызов oauth2 Login для подключения к регистрации клиента Cognito.
4. Добавьте целевую страницу
Затем мы добавим простую целевую страницу Thymeleaf, чтобы знать, когда мы вошли в систему:
Проще говоря, это отобразит ваше имя пользователя, когда мы войдем в систему, или ссылку для входа, когда мы этого не сделаем. Обратите пристальное внимание на то, как выглядит ссылка, так как она берет часть cognito из нашего файла конфигурации.
А затем давайте убедимся, что мы привязываем корень приложения к нашей странице приветствия:
@Configuration public class CognitoWebConfiguration implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("home"); } }
5. Запустите приложение
Это класс, который приведет в движение все, что связано с auth:
@SpringBootApplication public class SpringCognitoApplication { public static void main(String[] args) { SpringApplication.run(SpringCognitoApplication.class, args); } }
Теперь мы можем запустить ваше приложение , перейдите в http://localhost:8080 , и нажмите на ссылку входа в систему. При вводе учетных данных для пользователя, которого мы создали на AWS, мы должны увидеть сообщение Hello, username .
6. Заключение
В этом уроке мы рассмотрели, как мы можем интегрировать Spring Security с Amazon Cognito с помощью простой конфигурации. А затем мы собрали все вместе с помощью всего лишь нескольких фрагментов кода.
Как всегда, код, представленный в этой статье, доступен на Github .