Nesta aula, vamos aprender como implementar autenticação e autorização com tokens JWT (JSON Web Tokens) em FastAPI. Os tokens JWT são uma forma segura e eficiente de autenticar usuários em sua aplicação web.
Passo 1: Instalação do PyJWT
Para começar, é necessário instalar o pacote PyJWT, que é uma biblioteca Python para gerar, codificar e decodificar tokens JWT. Para instalar o PyJWT, execute o seguinte comando em seu terminal:
pip install PyJWT
Passo 2: Configuração do JWT Secret Key
Em seguida, você precisará definir uma chave secreta para assinar seus tokens JWT. Este segredo deve ser mantido em segredo e não deve ser compartilhado publicamente. Você pode definir a chave secreta em seu arquivo de configuração ou em uma variável de ambiente. Por exemplo:
JWT_SECRET = "minha_chave_secreta"
Passo 3: Implementação da Autenticação com Tokens JWT
Agora, vamos implementar a autenticação com tokens JWT em sua aplicação FastAPI. Primeiro, importe as bibliotecas necessárias:
from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
from passlib.context import CryptContext
Em seguida, defina o contexto de criptografia para armazenar e verificar senhas criptografadas:
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
Defina as configurações JWT, incluindo o algoritmo de criptografia e o tempo de expiração do token:
JWT_ALGORITHM = "HS256"
JWT_EXPIRATION = 3600
Em seguida, crie funções auxiliares para gerar e verificar tokens JWT:
def create_access_token(data: dict):
to_encode = data.copy()
expires = datetime.utcnow() + timedelta(minutes=JWT_EXPIRATION)
to_encode.update({"exp": expires})
encoded_jwt = jwt.encode(to_encode, JWT_SECRET, algorithm=JWT_ALGORITHM)
return encoded_jwt
def decode_access_token(token: str):
try:
payload = jwt.decode(token, JWT_SECRET, algorithms=[JWT_ALGORITHM])
return payload
except JWTError:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
Agora você pode criar rotas para login e verificação de token:
@app.post("/login")
def login(username: str, password: str):
# Verifique se o usuário existe e a senha está correta
# Se sim, crie e retorne um token de acesso
return {"access_token": create_access_token({"sub": username})}
@app.get("/verify_token")
def verify_token(token: str = Depends(OAuth2PasswordBearer(tokenUrl="/login"))):
payload = decode_access_token(token)
return {"user": payload["sub"]}
Passo 4: Proteção de Rotas com Token JWT
Para proteger rotas específicas que requerem autenticação, você pode usar o decorador Depends
com a classe OAuth2PasswordBearer
. Por exemplo:
@app.get("/protected_route")
def protected_route(current_user: str = Depends(OAuth2PasswordBearer(tokenUrl="/login"))):
return {"message": "This is a protected route", "user": current_user}
Ao acessar a rota /protected_route
, o usuário será obrigado a fornecer um token JWT válido no cabeçalho Authorization
.
Espero que este tutorial tenha sido útil para aprender a implementar autenticação e autorização com tokens JWT em FastAPI. Boa sorte em seus projetos!
essa playlist deveria ganhar o Emmy das séries. Dei uma boiada de leve no final da aula 5, mas dei uma revisitada nela em 2x e ta sussa agora
Aula muito boa!!! Valeu Duno!
Excelente aula!!
Aonde fica armazenado o toke ?
Valeu!
Outra aula sensacional!
Eu estou disposto a pagar só para vc me ensinar
Se puder ensinar como fazer o deploy ficarei agradecido.
Ficou muito bom
o meu deu problema na hora de gerar o JWT: ZoneInfoNotFoundError: 'No time zone found with key UTC'
Solução: pip install tzdata
finalmente entendi, valeu!