{"id":29635178,"url":"https://github.com/apolinario0x21/identity-manager","last_synced_at":"2026-05-08T01:44:19.006Z","repository":{"id":287083680,"uuid":"962381714","full_name":"apolinario0x21/identity-manager","owner":"apolinario0x21","description":"Este é um projeto de exemplo que demonstra a implementação de um sistema de autenticação e autorização usando JSON Web Tokens (JWT) com Spring Boot, Spring Security e Spring Data JPA.","archived":false,"fork":false,"pushed_at":"2025-07-14T21:38:45.000Z","size":34,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-15T02:22:08.097Z","etag":null,"topics":["java","jwt","jwt-auth","jwt-authentication","jwt-token","spring","spring-boot","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/apolinario0x21.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-08T04:35:49.000Z","updated_at":"2025-07-14T21:38:49.000Z","dependencies_parsed_at":"2025-07-15T02:25:39.960Z","dependency_job_id":"dfdd742c-915c-46bd-ae69-37dea642527b","html_url":"https://github.com/apolinario0x21/identity-manager","commit_stats":null,"previous_names":["apolinario0x21/api","apolinario0x21/identity-manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/apolinario0x21/identity-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apolinario0x21%2Fidentity-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apolinario0x21%2Fidentity-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apolinario0x21%2Fidentity-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apolinario0x21%2Fidentity-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/apolinario0x21","download_url":"https://codeload.github.com/apolinario0x21/identity-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/apolinario0x21%2Fidentity-manager/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270579673,"owners_count":24610049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-15T02:00:12.559Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","jwt","jwt-auth","jwt-authentication","jwt-token","spring","spring-boot","spring-security"],"created_at":"2025-07-21T16:10:15.607Z","updated_at":"2026-04-12T07:35:39.605Z","avatar_url":"https://github.com/apolinario0x21.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Identity Manager\n![Status](https://img.shields.io/badge/status-active-success.svg)\n![Java](https://img.shields.io/badge/Java-17-orange)\n![Spring Boot](https://img.shields.io/badge/Spring_Boot-3.4.4-green)\n[![JWT](https://img.shields.io/badge/JWT-0.11.5-yellow?logo=jsonwebtokens)](https://jwt.io/)\n[![PostgreSQL](https://img.shields.io/badge/PostgreSQL-17-blue?logo=postgresql)](https://www.postgresql.org/)\n![Build](https://img.shields.io/badge/Built%20with-Maven-red)\n![License](https://img.shields.io/github/license/apolinario0x21/identity-manager)\n[![Security](https://img.shields.io/badge/Security-Spring%20Security-brightgreen)](https://spring.io/projects/spring-security)\n\nO projeto consiste em uma API RESTful que permite aos usuários se registrarem, fazerem login para obter um token de acesso e acessarem rotas protegidas. Ele também inclui funcionalidades como atualização de token (refresh token) e listagem de usuários com paginação.\n\n## Funcionalidades\n- Registro de Usuário: Endpoint para criar novos usuários.\n- Autenticação de Usuário: Endpoint de login que retorna um JWT após a autenticação bem-sucedida.\n- Autorização baseada em Token: Rotas protegidas que só podem ser acessadas com um JWT válido.\n- Atualização de Token (Refresh Token): Endpoint para obter um novo token de acesso usando um refresh token.\n- Segurança: Senhas são armazenadas de forma segura usando BCrypt.\n- Paginação e Ordenação: Endpoint para listar usuários com suporte para paginação e ordenação.\n- Tratamento de Exceções: Handler global para tratar erros de forma consistente.\n- Testes Unitários: Testes para serviços e utilitários garantindo a qualidade do código.\n\n\n## 🛠️ Tecnologias Utilizadas\n- Java 17\n- Spring Boot 3.4.4\n- Spring Security: Para autenticação e controle de acesso.\n- Spring Data JPA: Para persistência de dados.\n- PostgreSQL: Banco de dados relacional.\n- Maven: Gerenciador de dependências.\n- JJWT (Java JWT): Para criação e validação dos tokens.\n- JUnit 5 \u0026 Mockito: Para testes unitários.\n\n## 🚀 Como Executar o Projeto\nSiga os passos abaixo para configurar e executar o projeto em seu ambiente local.\n\n### Pré-requisitos\n- Java Development Kit (JDK) 17 ou superior.\n- Maven 3.8 ou superior.\n- Uma instância do PostgreSQL em execução.\n\n#### 1. Clonar o Repositório\n  \n  ```bash\n    git clone \u003cURL_DO_SEU_REPOSITORIO\u003e\n    cd jwt-auth\n  ```\n\n#### 2. Configurar o Banco de Dados\n  - Acesse seu servidor PostgreSQL e crie um novo banco de dados. Por exemplo: identity_manager_db.\n  - Abra o arquivo src/main/resources/application.properties.\n  - Atualize as seguintes propriedades com as suas credenciais do PostgreSQL:\n\n```Properties\n\nspring.datasource.url=jdbc:postgresql://localhost:5432/identity_manager_db\nspring.datasource.username=seu_usuario_postgres\nspring.datasource.password=sua_senha_postgres\n```\n\n#### 3. Configurar Variáveis de Ambiente\nÉ uma boa prática não commitar segredos. No arquivo application.properties, altere o segredo do JWT para um valor único e seguro.\n\n```Properties\n# Gere uma chave secreta forte para produção\njwt.secret=sua_chave_secreta_super_segura_aqui\njwt.expiration=900000 # 15 minutos\n```\n\n#### 4. Instalar Dependências e Executar\nO Maven cuidará do download de todas as dependências necessárias.\n\n```Bash\n\n# Para instalar as dependências e executar o projeto\nmvn spring-boot:run\n```\n\nA aplicação estará disponível em http://localhost:8080.\n\n\n## 🧪 Executando os Testes\nPara rodar a suíte de testes unitários e garantir que tudo está funcionando como esperado, execute o comando:\n\n```Bash\nmvn test\n```\n\n## 📡 Endpoints da API\nA coleção de endpoints da API está disponível no prefixo /.\n\n| Método   | Endpoint       | Protegido  | asd |\n| :- | :- | :- | :-\n| `POST` | `/auth/register` | Não | Registra um novo usuário. |\n| `POST` | `/auth/login` | Não | Autentica um usuário e retorna um JWT. |\n| `POST` | `/auth/refresh-token` | Não | Gera um novo token de acesso a partir de um refresh token. |\n| `GET` | `/api/protected` | Sim | Rota de exemplo que requer autenticação. |\n| `GET` | `/users` | Sim | Lista todos os usuários com paginação e ordenação. |\n\n## Exemplo de Requisições\n### Registrar Usuário - `POST /auth/register`\n```json\n{\n    \"username\": \"novo_usuario\",\n    \"password\": \"senha_forte_123\",\n    \"email\": \"usuario@exemplo.com\"\n}\n```\n\n### Fazer Login - `POST /auth/login`\n```json\n{\n    \"username\": \"novo_usuario\",\n    \"password\": \"senha_forte_123\"\n}\n```\n\n### Acessar Rota Protegida - `GET /api/protected`\nHeader:\n`Authorization: Bearer \u003cseu_token_jwt\u003e`\n\n### Listar Usuários com Paginação - `GET /users?page=0\u0026size=5\u0026sortBy=username\u0026sortDirection=asc`\nHeader:\n`Authorization: Bearer \u003cseu_token_jwt\u003e`\n\n\n## 📄 Licença\nEste projeto está sob a licença MIT. Veja o arquivo [LICENSE](https://github.com/apolinario0x21/identity-manager/blob/main/LICENSE) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapolinario0x21%2Fidentity-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fapolinario0x21%2Fidentity-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fapolinario0x21%2Fidentity-manager/lists"}