Esta API foi desenvolvida para demonstrar um sistema de autenticação e autorização baseado em JWT (JSON Web Tokens). Ela inclui endpoints protegidos que apenas usuários com permissões específicas podem acessar.
- /token: Gera um token JWT ao receber credenciais válidas.
- /user: Endereço acessível apenas por usuários com o papel user.
- /admin: Endereço acessível apenas por usuários com o papel admin.
Além disso, utiliza um banco de dados para gerenciar os usuários, salvando-os de forma persistente e utilizando consultas para autenticação.
Certifique-se de ter o seguinte software instalado em sua máquina:
- Python 3.9+
- SQLite3 (ou outro banco de dados caso queira modificar)
- Git
Clone o repositório
git clone https://github.com/josejonatasoliveira/api_jwt_authentication
Entre no projeto executando o seguinte comando no terminal.
cd api_jwt_authentication
Após isso crie um ambiente virtual para realizar as instalações das dependencias.
python -m venv .venv
Ative o ambiente executando o seguinte comando.
source .venv/bin/activate
Instale as dependencias do projeto.
pip install -r requirements-test.txt
Após isso é necessário realizar a migração e criação da base de dados. Para isso deve-se executar o seguinte comando.
alembic upgrade head
Isso fará com que a tabela user seja criada no banco de dados.
E, por fim, para rodar o projeto execute o seguinte comando.
uvicorn app.main:app --reload --port 8005
O FastAPI fornece uma interface de documentação interativa via Swagger.
Após iniciar a API, acesse a documentação interativa do Swagger:
Testando Endpoints
- Obter um Token No Swagger, vá até o endpoint POST /token e insira as credenciais dos usuários fictícios:
User:
- username: user
- password: L0XuwPOdS5U
Admin:
- username: admin
- password: JKSipm0YH
Ao enviar a requisição, um token JWT será retornado.
- Acessar rotas protegidas
Com o token obtido, vá para os endpoints /user ou /admin, clique em "Authorize" no Swagger, insira o token no formato Bearer e teste os endpoints protegidos.
/user
é acessível somente para o usuário com papel user./admin
é acessível somente para o usuário com papel admin.
- Como rodar os testes
A API foi projetada com testes que utilizam pytest e httpx. Para rodar os testes, execute o seguinte comando:
pytest