{"id":25267746,"url":"https://github.com/alexsimao/basic-auth-api","last_synced_at":"2026-05-18T00:09:52.161Z","repository":{"id":276404391,"uuid":"929191562","full_name":"AlexSimao/basic-auth-api","owner":"AlexSimao","description":"Esta aplicação de estudo demonstra como configurar e utilizar o Spring Security em uma aplicação Spring Boot para autenticação e autorização de usuários, utilizando tokens JWT. A aplicação define diferentes níveis de acesso para usuários com roles distintas, como ADMIN e USER, e protege endpoints com base nessas roles.","archived":false,"fork":false,"pushed_at":"2025-05-23T03:44:15.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-05T09:38:46.377Z","etag":null,"topics":["estudos-java","java","jwt","jwt-token","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":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AlexSimao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-02-08T01:27:31.000Z","updated_at":"2025-05-23T03:44:18.000Z","dependencies_parsed_at":"2025-02-08T02:27:53.182Z","dependency_job_id":"a54d197b-d384-436b-9a0c-3ed0e7883d58","html_url":"https://github.com/AlexSimao/basic-auth-api","commit_stats":null,"previous_names":["alexsimao/basic-auth-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AlexSimao/basic-auth-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexSimao%2Fbasic-auth-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexSimao%2Fbasic-auth-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexSimao%2Fbasic-auth-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexSimao%2Fbasic-auth-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AlexSimao","download_url":"https://codeload.github.com/AlexSimao/basic-auth-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AlexSimao%2Fbasic-auth-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33160170,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"ssl_error","status_checked_at":"2026-05-17T22:39:10.741Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["estudos-java","java","jwt","jwt-token","spring-boot","spring-security"],"created_at":"2025-02-12T09:52:13.395Z","updated_at":"2026-05-18T00:09:52.154Z","avatar_url":"https://github.com/AlexSimao.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Security Application\n\nEsta aplicação é um exemplo de como configurar e utilizar o Spring Security para autenticação e autorização de usuários em uma aplicação Spring Boot. A aplicação utiliza tokens JWT (JSON Web Tokens) para autenticação e define diferentes níveis de acesso para usuários com diferentes roles (papéis).\n\n## Funcionalidades\n\n- **Autenticação de Usuários**: Os usuários podem se autenticar utilizando suas credenciais (email e senha) para obter um token JWT.\n- **Autorização de Usuários**: A aplicação define diferentes níveis de acesso para usuários com diferentes roles (papéis), como ADMIN e USER.\n- **Proteção de Endpoints**: Os endpoints da aplicação são protegidos com base nas roles dos usuários, garantindo que apenas usuários autorizados possam acessar determinados recursos.\n- **Configuração Stateless**: A aplicação é configurada para ser stateless, ou seja, não mantém estado de sessão entre as requisições. Cada requisição é autenticada de forma independente utilizando tokens JWT.\n\n## Endpoints\n\n### `/auth/register` (POST)\n\n- **Descrição**: Endpoint para registrar um novo usuário.\n- **Acesso**: Apenas usuários com a role ADMIN podem acessar este endpoint.\n- **Exemplo de Requisição**:\n  ```json\n  {\n    \"email\": \"user@example.com\",\n    \"password\": \"password123\",\n    \"role\": \"USER\"\n  }\n  ```\n\n### `/auth/login` (POST)\n\n- **Descrição**: Endpoint para autenticar um usuário e obter um token JWT.\n- **Acesso**: Acesso público, qualquer usuário pode acessar este endpoint para se autenticar.\n- **Exemplo de Requisição**:\n  ```json\n  {\n    \"email\": \"user@example.com\",\n    \"password\": \"password123\"\n  }\n  ```\n\n### `/user` (GET)\n\n- **Descrição**: Endpoint para obter informações do usuário autenticado.\n- **Acesso**: Apenas usuários com a role ADMIN podem acessar este endpoint.\n- **Exemplo de Requisição**:\n  ```http\n  GET /user\n  Authorization: Bearer \u003ctoken_jwt\u003e\n  ```\n\n## Configuração de Segurança\n\nA configuração de segurança da aplicação é definida na classe `SecurityConfig`. Aqui estão os principais pontos da configuração:\n\n### Desabilitar Proteção CSRF\n\n```java\n.csrf(csrf -\u003e csrf.disable())\n```\n- **Descrição**: Desabilita a proteção CSRF (Cross-Site Request Forgery) para a aplicação. Isso é geralmente seguro para APIs RESTful que utilizam tokens JWT para autenticação.\n\n### Configuração Stateless\n\n```java\n.sessionManagement(session -\u003e session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))\n```\n- **Descrição**: Configura a política de sessão como stateless, ou seja, a aplicação não mantém estado de sessão entre as requisições. Cada requisição é autenticada de forma independente utilizando tokens JWT.\n\n### Autorização de Requisições\n\n```java\n.authorizeHttpRequests(authorize -\u003e authorize\n    .requestMatchers(HttpMethod.POST, \"/auth/register\").hasRole(\"ADMIN\")\n    .requestMatchers(HttpMethod.POST, \"/auth/login\").permitAll()\n    .requestMatchers(HttpMethod.GET, \"/user\").hasRole(\"ADMIN\")\n    .anyRequest().authenticated())\n```\n- **Descrição**: Define as regras de autorização para os endpoints da aplicação. Apenas usuários com a role ADMIN podem acessar o endpoint `/auth/register` e `/user`, enquanto o endpoint `/auth/login` é acessível por qualquer usuário.\n\n### Filtro de Segurança\n\n```java\n.addFilterBefore(securityFilter, UsernamePasswordAuthenticationFilter.class)\n```\n- **Descrição**: Adiciona o filtro de segurança `SecurityFilter` antes do filtro `UsernamePasswordAuthenticationFilter` para verificar se o token do usuário é válido para a operação solicitada.\n\n## Roles de Usuários\n\nA aplicação define diferentes níveis de acesso para usuários com diferentes roles (papéis):\n\n- **ADMIN**: Usuários com a role ADMIN têm acesso a todos os endpoints da aplicação, incluindo o endpoint de registro de novos usuários.\n- **USER**: Usuários com a role USER têm acesso limitado aos endpoints da aplicação.\n\n## Configuração de Beans\n\n### `PasswordEncoder`\n\n```java\n@Bean\npublic PasswordEncoder passwordEncoder() {\n  return new BCryptPasswordEncoder();\n}\n```\n- **Descrição**: Define um bean `PasswordEncoder` utilizando o `BCryptPasswordEncoder` para codificação de senhas.\n\n### `AuthenticationManager`\n\n```java\n@Bean\npublic AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration)\n    throws Exception {\n  return authenticationConfiguration.getAuthenticationManager();\n}\n```\n- **Descrição**: Define um bean `AuthenticationManager` utilizando a configuração de autenticação fornecida pelo Spring Security.\n\n## Conclusão\n\nEsta aplicação demonstra como configurar e utilizar o Spring Security para autenticação e autorização de usuários em uma aplicação Spring Boot. Utilizando tokens JWT para autenticação e definindo diferentes níveis de acesso para usuários com diferentes roles, a aplicação garante que apenas usuários autorizados possam acessar determinados recursos.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexsimao%2Fbasic-auth-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexsimao%2Fbasic-auth-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexsimao%2Fbasic-auth-api/lists"}