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:
-
Add a User - usaremos esse usuário para fazer login em nosso aplicativo Spring
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:
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.