Autenticando com o Amazon Cognito usando o Spring Security

Autenticando com o Amazon Cognito usando o Spring Security

1. Introdução

Neste tutorial, veremos como podemos usar o suporte OAuth 2.0 deSpring Security para autenticar comAmazon Cognito.

Ao longo do caminho, daremos uma breve olhada no que é Amazon Cognito e que tipo de fluxoOAuth 2.0 ele suporta.

No final, teremos um aplicativo simples de uma página. Nada chique.

2. O que é o Amazon Cognito?

Cognito is a user identity and data synchronization service que torna mais fácil para nós gerenciarmos os dados do usuário para nossos aplicativos em vários dispositivos.

Com o Amazon Cognito, podemos:

  • criar, autenticar e autorizar usuários para nossos aplicativos

  • criar identidades para usuários de nossos aplicativos que usam outrosidentity providers públicos como Google, Facebook ou Twitter

  • salvar os dados do usuário do nosso aplicativo em pares de valores-chave

3. Configuração

3.1. Configuração do Amazon Cognito

Como provedor de identidade, o Cognito oferece suporte aauthorization_code, implicit, and client_credentials grants. Para nossos propósitos, vamos configurar as coisas para usar o tipo de concessãoauthorization_code.

Primeiro, precisamos de um pouco da configuração do Cognito:

Na configuração do aplicativo cliente,make sure the CallbackURL matches the redirectUriTemplate do arquivo de configuração do Spring. No nosso caso, será:

http://localhost:8080/login/oauth2/code/cognito

OAllowed OAuth flow deve serAuthorization code grant. Então, na mesma página,, precisamos definirAllowed OAuth scope paraopenid.

3.2. Configuração da Primavera

Como queremos usar o login OAuth 2.0, precisaremos adicionar as dependências Spring Security apropriadas ao nosso aplicativo:


    org.springframework.security
    spring-boot-starter-security-oauth2-client


    org.springframework.security
    spring-security-oauth2-jose

E então, vamos precisar de alguma configuração para ligar tudo junto:

spring:
  security:
    oauth2:
      client:
        registration:
          cognito:
            clientId: clientId
            clientSecret: clientSecret
            scope: openid
            redirectUriTemplate: "http://localhost:8080/login/oauth2/code/cognito"
            clientName: cognito-client-name
        provider:
          cognito:
            issuerUri: https://cognito-idp.{region}.amazonaws.com/{poolId}
            usernameAttribute: cognito:username

And with that, we should have Spring and Amazon Cognito set up! O resto do tutorial é apenas amarrar algumas pontas soltas.

4. Adicionar uma página de destino

Em seguida, adicionamos uma página de destinoThymeleaf simples para sabermos quando estamos logados:

OAuth 2.0 Spring Security Cognito Demo

Hello, !

Simplificando, isso exibirá nosso nome de usuário quando estivermos logados ou um link de login quando não estivermos. Preste muita atenção na aparência do link desdeit picks up the cognito part from our configuration file.

E então vamos ter certeza dewe tie the application root to our welcome page:

@Configuration
public class CognitoWebConfiguration implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("home");
    }
}

5. Execute o aplicativo

Esta é a classe que colocará tudo relacionado à autenticação em movimento:

@SpringBootApplication
public class SpringCognitoApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringCognitoApplication.class, args);
    }
}

Now we can start our application, vá parahttp://localhost:8080,e clique no link de login.

6. Conclusão

Neste tutorial, vimos como podemos integrar o Spring Security ao Amazon Cognito com apenas algumas configurações simples. E então juntamos tudo com apenas alguns pedaços de código.

Como sempre, o código apresentado neste artigo está disponívelover on Github.