
Nesta primeira aula, irei dar uma introdução ao curso, quem sou eu e o que aprenderemos durante todo o curso!
Este vídeo tem como objetivo apresentar tudo que será desenvolvido no curso na parte prática, tanto em código quanto de executando os projetos rodando, mostrando respostas, como e o que faremos cada aplicação. Irei mostrar os serviços rodando com docker-compose e via Swagger e Postman.
Nesta aula, iremos abordar os conceitos do significado de Stateless, Stateful e o que é um Estado especificamente no mundo da computação, conceitos que serão necessários para compreender as abordagens de autenticação.
Nesta aula, iremos iniciar a autenticação stateless, conceitos, aplicações, vantagens e desvantagens, e também o funcionamento do token JWT, seu significado e a divisão de seus dados.
Nesta aula, iremos iniciar a autenticação stateful, conceitos, aplicações, vantagens e desvantagens, e também o funcionamento de um token opaco, os melhores bancos de dados e estratégias para uso dessa abordagem.
Este vídeo tem como objetivo elencar as principais características que discutimos nas aulas anteriores sobre as duas abordagens, e exemplificar usos de cada estratégia dependendo do tipo de projeto que você estará atuando. Este vídeo finaliza a seção teórica do curso.
Nesta aula, irei apresentar as ferramentas que utilizaremos para realizar o desenvolvimento do curso, e também informarei as URLs para download. Serão elas: IntelliJ IDEA Community, DBeaver, Docker e Postman.
Nesta aula, iremos realizar a padronização dos nomes dos diretórios, aplicações e bancos de dados. Também iremos criar os containers Docker dos bancos de dados PostgreSQL e Redis das aplicações que iremos trabalhar.
Nesta aula, iniciaremos a nossa arquitetura básica com Docker-compose, que será nosso gerenciador de todos os containers que estaremos utilizando para subir tudo com um comando!
Nesta aula, iniciaremos a criação dos projetos através do Spring Starter, com todas as dependências base que usaremos em comum entre todas as APIs.
Nesta aula, iremos estruturar todas as dependências que usaremos em cada uma das duas aplicações!
Nesta aula, iremos criar a configuração de conexão das aplicações stateless-auth-api e stateful-auth-api com o PostgreSQL, criando a configuração no application.yml, a entidade de banco de dados User com as anotações do JPA, e também a criação inicial dos dados para nosso projeto de estudo.
Nesta aula, criaremos todas as classe de exceções de erro (Exception) de erro que serão lançadas e utilizadas em todas as 4 aplicações desenvolvidas.
Nesta aula, realizaremos a criação de todos os Dockerfile das aplicações, e executaremos um deles para validar se nosso Dockerfile sobe se conectando internamente na rede do Docker e apontando para o nosso host de banco de dados.
Nesta última aula desta seção, iremos por fim, adicionar todas as nossas aplicações no nosso Docker-compose, configurando cada um das 4 aplicações, e subindo tudo com apenas um comando! Essa aula finaliza a nossa criação de um ambiente de desenvolvimento para inicializar nosso projeto.
Nesta aula, iremos começar a criar nossa classe de geração e validação de um token JWT na nossa stateless-auth-api, iremos também configurar a chave de geração do JWT.
Nesta aula, criaremos nossa classe AuthService, que irá se comunicar com nossa JwtService para geração e validação de token, e também que irá se comunicar com nosso endpoint da nossa API de stateless-auth-api, essa classe que irá realizar a chamada ao banco de dados para recuperar um usuário autenticado, validar se o token informado está correto e disponibilizar o token ao usuário. Nesta aula também iremos criar a configuração da classe PasswordEncoder!
Nesta aula, criaremos nosso endpoint REST para gerar e validar um token de acesso, finalizando assim o nosso projeto stateless-auth-api. Iremos também testar os endpoints e toda a lógica que criamos até este momento!
Nesta aula, iniciaremos o desenvolvimento da nossa stateless-any-api, e iniciaremos com a nossa JwtService para realizar a validação do token informado, e também a recuperação do usuário autenticado do token de maneira stateless, sem comunicação alguma com banco de dados ou comunicação com a stateless-auth-api.
Nesta aula, iremos criar nossa classe AnyService, que terá a responsabilidade de atuar como uma camada responsável por se comunicar com nosso endpoint REST, e com nossa JwtService, e também desenvolveremos nosso AnyController, implementando e finalizando nossa API. Por fim, executaremos tudo e iremos testar nossa validação de autenticação de maneira stateless.
Nesta aula, iremos iniciar o desenvolvimento da nossa arquitetura stateful, e iremos primeiramente configurar o nosso acesso ao Redis na aplicação stateful-auth-api utilizando o RedisTemplate e o LettuceConnectionFactory.
Nesta aula, iremos iniciar a criação dos 4 DTOs necessários para comunicar os dados na nossa aplicação, e também iremos criar nossa classe TokenService, que terá a responsabilidade de gerar, validar e remover um token do Redis. Aqui também iremos trabalhar com o RedisTemplate para realizar as operações diretamente no Redis.
Nesta aula, criaremos nossa classe AuthService, que irá se comunicar com nossa TokenService para geração, validação e remoção de token, e também que irá se comunicar com nosso endpoint da nossa API de stateful-auth-api, essa classe que irá realizar a chamada ao banco de dados para recuperar um usuário autenticado, validar se o token informado está correto e disponibilizar o token ao usuário. Nesta aula também iremos criar a configuração da classe PasswordEncoder!
Nesta aula, criaremos nosso endpoint REST para gerar e validar um token de acesso, assim como recuperar um usuário autenticado e também deslogar um usuário, finalizando assim o nosso projeto stateful-auth-api. Iremos também testar os endpoints e toda a lógica que criamos até este momento!
Nesta aula, iniciaremos o desenvolvimento do nosso último projeto, o stateful-any-api, que representa um microsserviço qualquer que precisa validar um token de autenticação de maneira stateful. Nesta aula, iremos apenas criar a nossa classe de configuração do HTTP Interfaces, nova funcionalidade do Spring Boot 3, advinda do Spring Framework 6, para realização de clients HTTP através de interfaces declarativas.
Nesta aula, iremos criar nossa interface TokenClient, que terá como objetivo configurar as chamadas HTTP de forma declarativa utilizando a biblioteca HTTP Interfaces, após termos configurado a mesma na aula anterior. Iremos configurar então 2 chamadas HTTP, para validar o token, e recuperar o usuário autenticado com base no token de acesso.
Nesta aula, criaremos nossas classes TokenService, responsável por chamar a nossa TokenClient para validar e recuperar um usuário autenticado, ela que será a conexão com nosso client HTTP, e também criaremos nossa classe AnyService, que terá o objetivo de conectar toda a lógica de validação de token, recuperação de usuário autenticado, e também de devolver uma resposta ao nosso endpoint, que será criado na próxima aula.
Nesta aula, iremos criar nossa classe AnyController, implementando e finalizando nossa API. Por fim, executaremos tudo e iremos testar nossa validação de autenticação de maneira stateful.
Nesta aula, iremos adicionar as configurações finais do Docker-Compose, ou seja, durante o desenvolvimento das 4 APIs, nós definimos mais variáveis de ambiente, tais como:
stateless-auth-api: JWT_SECRET_KEY
stateless-any-api: JWT_SECRET_KEY
stateful-auth-api: REDIS_HOST, REDIS_PORT
stateful-any-api: STATEFUL_AUTH_BASE_URL
Precisaremos definir todas essas variáveis no nosso docker-compose.yml para que seja possível subir toda nossa arquitetura apenas com o comando docker-compose up --build -d.
Após tudo desenvolvido e configurado, iremos rodar as 4 APIs, e iremos visualizar na prática como ambas realizam exatamente a mesma coisa, porém, com funcionamentos diferentes, podendo apontar as diferenças entre as arquiteturas, e verificar como elas corroboram ao que foi apresentado nas aulas teóricas.
Nesta última aula, irei dar algumas dicas e sugestões sobre o que estudar após este curso, na área de autenticação e microsserviços (desenvolvimento, nuvem, gerenciamento de containers e ferramentas).
Nesta aula, faremos a atualização da biblioteca JJWT que estávamos utilizando na versão 0.11.5 para a 0.12.3, que sofreu uma alteração major em sua versão, e acabou alterando o comportamento de alguns métodos na hora de gerar e validar o token!
Neste curso, serão abordados conceitos, abordagens e estratégias de autenticação hoje utilizadas no mercado de tecnologia, sendo elas autenticação Stateful e Stateless.
Iremos iniciar o curso com uma seção teórica sobre os conceitos de stateful e stateless, JWT, tokens opacos, e as vantagens e desvantagens de cada estratégia.
Em sequência, iremos utilizar tecnologias como Java 17 e Spring Boot 3 para criar dois projetos, utilizando as abordagens citadas, para compreender como a definição de uma estratégia de autenticação pode mudar completamente o curso de um sistema.
Cada um dos dois projetos contará com 2 aplicações, uma representando a API de autenticação, e outra representando uma API qualquer, que apenas terá que validar um token de acesso.
Para isso, trabalharemos com bancos de dados PostgreSQL, para armazenar dados do usuário, e Redis, banco de dados NoSQL de chave/valor para armazenar tokens de autenticação.
Também trabalharemos com a implementação de autenticação JWT para arquitetura Stateless.
Para rodar a nossa arquitetura, estaremos utilizando também Docker e Docker-compose.
Ao fim deste curso você compreenderá as duas principais estratégias de autenticação, como implementar cada uma delas, e, o mais importante, ser capaz de compreender quando cada uma deve ser melhor utilizada, pois sabemos que em tecnologia, nunca há um melhor, e sim, a melhor ocasião para utilização.