Para o funcionamento do projeto é necessário primeiro subir o ambiente KeyCloak Server e Redis e em seguida realizar a configuração do KeyCloak seguindo os passos deste LINK
Este projeto é uma prova de conceito da utilização do KeyCloak como serviço de autenticação de usuários e o Redis como serviço para realizar o cache de informações.
A utilização de uma API Rest foi para facilitar a prova de conceito e demonstrar os procedimentos de salvar, atualizar, buscar e deletar entidades do banco de dados.
O Spring Boot é um projeto da Spring que veio para facilitar o processo de configuração e publicação de nossas aplicações. A intenção é ter o seu projeto rodando o mais rápido possível e sem complicação.
Ele consegue isso favorecendo a convenção sobre a configuração. Basta que você diga pra ele quais módulos deseja utilizar (WEB, Template, Persistência, Segurança, etc.) que ele vai reconhecer e configurar.
Inicializador de projetos spring: Spring Initializr
Patrocinado pela Red Hat, o Keycloak é um software open source de um servidor JBoss feito para trabalhar em conjunto com sua aplicação em implementações mais comuns de autenticação e autorização. Caso as configurações padrão não te atendam, existem várias configurações e customizações que podem ser feitas para adequar o funcionamento ao seu sistema.
São oferecidas pelo Keycloak funcionalidades como:
- Criação de usuário (podendo ser criados pelo administrador do sistema, e habilitado ou não para o próprio usuário se cadastrar);
- Login, “esqueci minha senha”, login com plataformas externas como redes sociais;
- Integração dos usuários com Active Directory;
- Ativação de usuários por confirmação de e-mail;
- Obrigar aceitação de termos de uso antes de logar;
- Customização das páginas que o usuário acessa (como a própria tela de login);
- Serviços para que outras aplicações busquem dados de usuários;
- Criação de permissões que seu sistema vai usar;
- Criação de grupos de usuário;
- i18n (internationalization);
- Entre outras várias configurações e customizações mais avançadas.
**Para utilizar o server do KeyCloak em conjunto com esta aplicação consultar o material disponível **AQUI (Env-DEV)****.
- Securing Spring Boot REST APIs with Keycloak
- Keycloak, not returning access token if update password action selected
- O que é Keycloak?
- KeyCloak - Open Source Identity and Access Management
O Redis é um armazenamento de estrutura de dados de chave-valor de código aberto e na memória. O Redis oferece um conjunto de estruturas versáteis de dados na memória que permite a fácil criação de várias aplicações personalizadas. Os principais casos de uso do Redis incluem cache, gerenciamento de sessões, PUB/SUB e classificações.
- O que é o Redis?
- Spring Data Redis Example 1
- Spring Data Redis Example 2
- Spring Data Redis Example 3
- Spring Data Redis CRUD Operations example with Spring Boot
- Error NoClassDefFoundError GenericObjectPoolConfig
- Error DefaultSerializer requires a Serializable payload but received an object
- Error NOAUTH Authentication required
Para utilizar o server do Redis em conjunto com esta aplicação consultar o material disponível AQUI (Env-DEV)
O Lombok é um framework para Java que permite escrever código eliminando a verbosidade, o que permite ganhar tempo de desenvolvimento para o que realmente é importante. Seu uso permite gerar em tempo de compilação os métodos getters e setters, métodos construtores, padrão builder e muito mais.
A Especificação OpenAPI , originalmente conhecida como Especificação Swagger , é uma especificação para arquivos de interface legíveis por máquina para descrever, produzir, consumir e visualizar serviços da Web RESTful . Originalmente parte da estrutura Swagger , tornou-se um projeto separado em 2016, supervisionado pela OpenAPI Initiative, um projeto de colaboração de código aberto da Linux Foundation. Swagger e algumas outras ferramentas podem gerar código, documentação e casos de teste a partir de um arquivo de interface.
- Usando a OpenAPI para criar APIs inteligentes que ajudam os desenvolvedores
- Open APO Initiative
- Documenting a Spring REST API Using OpenAPI 3.0
- springdoc-openapi v1.5.9
- OpenAPI 3 Documentation With Spring Boot
- OpenAPI Specification - wikipedia
Os testes da API podem ser feitos utilizando a documentação especificada no tópico abaixo ou utilizando o software Postman. Junto ao projeto foi disponibilizado uma collection para ser importado no software e assim poder realizar os testes com os endpoints especificiados.
Para importar seguir os seguintes passos:
- Fazer o download e instalar o Postman
- Abrir o Postman
- Clicar em file
- Clicar em import
- Arrastar e soltar o arquivo presenta na pasta "Postman/KeyCloak.postman_collection.json"
- Arrastar e soltar o arquivo presenta na pasta "Postman/Security API.postman_collection.json.json"
Para realizar os testes é necessário iniciar a aplicação keyCloak presente no material do tópico do KeyCloak e acessar a coleção do Postman para realizar o POST para salvar o token na variável global do postman. Após realizar os passos anteriores os demais endpoints irão utilizar desta variável global automáticamente
Para visualizar a documentação da API rodar o código e acessar no navegador o link abaixo:
http://localhost:9001/security/v1/swagger-ui.html
- Mapear as entidades e Conectar ao banco de dados MongoDB - NoSQL.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- Lombok cria os construtores , getteer e setters de forma automática.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<scope>provided</scope>
</dependency>
- Para montar a API Rest
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- Para documentar a API Rest
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.2</version>
</dependency>
- Redis Cache
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.5.1</version>
</dependency>
- Dependências do Data Redis
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.10.0</version>
</dependency>