Рубрики
Без рубрики

Аутентификация с помощью Amazon Cognito с использованием Spring Security

Узнайте, как Spring Security упрощает интеграцию клиентского приложения с Amazon Cognito.

Автор оригинала: 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, чтобы знать, когда мы вошли в систему:

OAuth 2.0 Spring Security Cognito Demo

Hello, !

Проще говоря, это отобразит ваше имя пользователя, когда мы войдем в систему, или ссылку для входа, когда мы этого не сделаем. Обратите пристальное внимание на то, как выглядит ссылка, так как она берет часть 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 .