{"id":27950678,"url":"https://github.com/rodrigo-kelven/api_oathu2","last_synced_at":"2026-04-10T15:38:40.781Z","repository":{"id":275681970,"uuid":"926852397","full_name":"Rodrigo-Kelven/API_OAthu2","owner":"Rodrigo-Kelven","description":"Este projeto implementa uma aplicação com autenticação de usuários utilizando o protocolo OAuth2, um padrão amplamente utilizado para autenticação e autorização em APIs e sistemas web. A seguir, discutiremos em detalhes o que é o OAuth2, como ele funciona, e como este projeto simplifica seu uso.","archived":false,"fork":false,"pushed_at":"2025-05-06T20:41:28.000Z","size":57,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T16:15:17.917Z","etag":null,"topics":["docker","fastapi","mongodb","postgresql","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","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/Rodrigo-Kelven.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-04T00:57:14.000Z","updated_at":"2025-05-06T20:41:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"21dd395e-bfd9-440e-a96d-d6200a64dfce","html_url":"https://github.com/Rodrigo-Kelven/API_OAthu2","commit_stats":null,"previous_names":["rodrigo-kelven/simple_api_oathu2","rodrigo-kelven/api_oathu2"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FAPI_OAthu2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FAPI_OAthu2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FAPI_OAthu2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rodrigo-Kelven%2FAPI_OAthu2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rodrigo-Kelven","download_url":"https://codeload.github.com/Rodrigo-Kelven/API_OAthu2/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252912964,"owners_count":21824066,"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","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":["docker","fastapi","mongodb","postgresql","python3"],"created_at":"2025-05-07T16:15:20.455Z","updated_at":"2025-12-30T22:35:11.409Z","avatar_url":"https://github.com/Rodrigo-Kelven.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Autenticação com OAuth2: Guia Completo e Exemplo de Implementação com FastAPI\n\n![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54) \n![FastAPI](https://img.shields.io/badge/FastAPI-%23FF4F00.svg?style=for-the-badge\u0026logo=fastapi\u0026logoColor=white)\n![Postgres](https://img.shields.io/badge/postgres-%23316192.svg?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white)\n![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge\u0026logo=mongodb\u0026logoColor=white) \n![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white) \n\n## Versão 0.2.15\n### Este projeto implementa uma aplicação com autenticação de usuários utilizando o protocolo OAuth2, um padrão amplamente utilizado para autenticação e autorização em APIs e sistemas web. A seguir, discutiremos em detalhes o que é o OAuth2, como ele funciona, e como este projeto simplifica seu uso com o framework FastAPI.\n\n## O que é OAuth2?\n\n#### OAuth2 (Open Authorization 2.0) é um protocolo de autorização que permite que você conceda acesso a recursos protegidos sem precisar compartilhar suas credenciais com terceiros. Em vez de fornecer sua senha diretamente a um serviço ou aplicação, você usa um token de acesso temporário, que é emitido após uma autenticação bem-sucedida.\n## Como funciona o OAuth2?\n\n#### O OAuth2 é composto por fluxos (ou \"flows\") de autenticação que permitem que as aplicações solicitem permissões para acessar recursos protegidos em nome do usuário. O fluxo básico de autenticação com OAuth2 geralmente segue esses passos:\n\n- O usuário se autentica: O usuário fornece suas credenciais (geralmente nome de usuário e senha) a um sistema de autenticação (como o Login).\n- O servidor de autorização emite um token de acesso: Após autenticação, o servidor gera um token de acesso. Esse token é o que a aplicação usará para acessar os recursos protegidos.\n- A aplicação faz chamadas à API com o token de acesso: Com o token, a aplicação consegue fazer solicitações à API protegida sem precisar fornecer a senha do usuário a cada requisição.\n- Expiração do token: O token tem um tempo de expiração. Quando expira, o usuário precisa se autenticar novamente para obter um novo token.\n\n## Tipos de Tokens\n\n## Existem diferentes tipos de tokens, sendo os mais comuns:\n\n- Token de acesso (Access Token): Usado para acessar recursos protegidos. Ele é geralmente passado nas requisições HTTP via cabeçalho (Authorization).\n- Token de atualização (Refresh Token): Usado para obter um novo token de acesso quando o atual expirar, sem a necessidade de o usuário se autenticar novamente.\n\n## Por que usar OAuth2?\n\n### OAuth2 é altamente seguro e flexível. Ele oferece várias vantagens para o controle de autenticação e autorização em sistemas web e APIs, incluindo:\n\n- Segurança: Ao utilizar tokens de acesso temporários, as credenciais (senhas) dos usuários não precisam ser compartilhadas diretamente, o que reduz o risco de vazamentos.\n- Escalabilidade: OAuth2 permite que os usuários autorizem vários serviços sem precisar digitar suas credenciais repetidamente.\n- Controle de Acesso: OAuth2 pode ser configurado para permitir que diferentes usuários acessem diferentes níveis de recursos, com base em suas permissões (roles).\n\n## O que este projeto faz?\n\n### Este projeto implementa um sistema de CRUD de usuários com autenticação utilizando OAuth2. A aplicação é construída com o FastAPI, um framework moderno e rápido para APIs, e implementa os seguintes fluxos:\n\n- Cadastro de Usuário: Crie um novo usuário fornecendo nome de usuário, email, senha e papel (role). O password é armazenado de forma segura com hashing.\n\n- Login: Faça login utilizando as credenciais do usuário (nome de usuário e senha), e receba um token de acesso (JWT) que pode ser usado para fazer requisições autenticadas.\n\n- Endpoints protegidos: Apenas usuários autenticados com um token de acesso válido podem acessar informações protegidas, como listar usuários ou alterar dados de um usuário.\n\n- Permissões baseadas em papéis (roles): A aplicação suporta diferentes papéis (roles) para os usuários, como \"admin\" ou \"user\". Apenas usuários com papéis adequados podem realizar certas operações, como criar, atualizar ou deletar usuários.\n\n# Como a implementação funciona?\n## Arquitetura do OAuth2\n\n- ### Autenticação:\n    - O usuário envia suas credenciais (usuário e senha) para o endpoint /token.\n    - O sistema valida as credenciais e emite um token JWT (JSON Web Token) de acesso.\n    - Este token contém informações importantes, como o nome do usuário e o papel (role).\n\n- ### Proteção de rotas:\n    - Para acessar endpoints protegidos, o usuário deve enviar o token JWT no cabeçalho Authorization de cada requisição.\n    - O FastAPI valida o token e verifica se o usuário tem permissão para acessar o recurso solicitado.\n\n- ### Verificação de permissões:\n    - Além de verificar se o usuário está autenticado (token válido), a aplicação verifica o papel do usuário para permitir ou bloquear o acesso a determinadas rotas.\n\n## Principais Componentes do Código\n\n- ### Modelos de Dados:\n    - UserDB: Representa o modelo do usuário no banco de dados. Contém informações como nome de usuário, senha hash, e papel.\n    - User: Modelo Pydantic para a validação de entrada e saída de dados relacionados ao usuário.\n    - Token: Representa o token de acesso JWT retornado após a autenticação.\n    - TokenData: Contém dados extraídos do token (como o nome de usuário e papel).\n\n- ### Funções de Autenticação:\n    - authenticate_user: Valida as credenciais de login e retorna o usuário autenticado.\n    - create_access_token: Gera um token JWT válido, que é usado para autenticação futura.\n    - get_current_user: Recupera o usuário autenticado com base no token JWT fornecido na requisição.\n    - verify_permissions: Verifica se o usuário tem permissão (com base no papel) para acessar um recurso.\n\n- ### Rotas (Endpoints):\n    - /token: Gera e retorna o token JWT após a autenticação.\n    - /users/: CRUD de usuários, com autorização para criar, listar, atualizar ou deletar com base no papel.\n    - Endpoints protegidos: Todos os endpoints que exigem autenticação e permissões verificam o token JWT para garantir que o usuário tenha permissão para realizar a ação.\n\n# Exemplos de uso\n- ### 1. Criação de um Usuário\n\n### Para criar um novo usuário (apenas permitido para administradores), envie uma requisição POST para /users/ com as informações do usuário (nome de usuário, email, etc.) e a senha.\n\n    POST /users/\n    Content-Type: application/json\n\n    {\n    \"username\": \"johndoe\",\n    \"full_name\": \"John Doe\",\n    \"email\": \"johndoe@example.com\",\n    \"password\": \"strongpassword123\",\n    \"role\": \"admin\"\n    }\n\n- ### 2. Login\n\n### Faça login com o nome de usuário e a senha para obter um token JWT.\n\n    POST /token\n    Content-Type: application/x-www-form-urlencoded\n\n    username=johndoe\u0026password=strongpassword123\n\n    Resposta:\n\n    {\n    \"access_token\": \"your_jwt_token_here\",\n    \"token_type\": \"bearer\"\n    }\n\n- ### 3. Acesso a Endpoints Protegidos\n\n### Para acessar um endpoint protegido (como /users/), envie uma requisição com o token JWT no cabeçalho Authorization.\n\n    GET /users/\n    Authorization: Bearer your_jwt_token_here\n\n## Como o projeto simplifica o uso do OAuth2?\n\nEste projeto fornece uma implementação simplificada do OAuth2 com FastAPI, permitindo que você se concentre no desenvolvimento do seu aplicativo sem precisar se preocupar com detalhes complexos de autenticação. O uso de JWT e a validação de permissões baseadas em papéis torna fácil a integração de segurança nas suas APIs.\n## Vantagens:\n\n- Implementação fácil e direta: Usando FastAPI, o processo de autenticação com OAuth2 se torna simples de configurar e integrar.\n- Validação de permissões: Definir permissões para diferentes papéis de usuários (admin, user) é fácil e flexível.\n- Segurança: A aplicação usa JWT para garantir que apenas usuários autenticados com permissões adequadas possam acessar recursos protegidos.\n\n# Como rodar esta API?\n#### Deve-se buildar as imagens antes para a criação dos containers\n    docker-compose build\n#### Agora pode dar up em todos os container que compoẽm a API.\n    docker-compose up\n    \n# Conclusão\n\nOAuth2 é uma excelente escolha para implementar autenticação segura e escalável em APIs e aplicações web. Neste projeto, mostramos como usar OAuth2 de maneira simples e eficiente, garantindo que apenas usuários autenticados e autorizados possam acessar recursos protegidos. Com FastAPI, o processo se torna ainda mais rápido e eficiente, permitindo que você implemente autenticação robusta com um mínimo de código.\n\n# Contribuições\nContribuições são bem-vindas! Se você tiver sugestões ou melhorias, sinta-se à vontade para abrir um issue ou enviar um pull request.;)\n\n## Autores\n- [@Rodrigo_Kelven](https://github.com/Rodrigo-Kelven)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigo-kelven%2Fapi_oathu2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodrigo-kelven%2Fapi_oathu2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodrigo-kelven%2Fapi_oathu2/lists"}