Apidog

All-in-one Collaborative API Development Platform

Design de API

Documentação de API

Depuração de API

Mock de API

Testes Automatizados de API

Inscreva-se gratuitamente
Home / Ponto de vista / Desbloqueando o Poder da Autenticação FastAPI: Proteja suas APIs com Facilidade

Desbloqueando o Poder da Autenticação FastAPI: Proteja suas APIs com Facilidade

Aprenda a proteger suas APIs com a autenticação FastAPI. Este guia abrangente cobre a implementação do OAuth2, criptografia de senhas e o uso de ferramentas como Apidog.com para agilizar o desenvolvimento da sua API. Comece com FastAPI hoje e construa APIs seguras e de alto desempenho sem esforço.

Seja você um desenvolvedor experiente ou apenas começando, garantir que suas APIs estejam seguras é fundamental. FastAPI, um framework web moderno e rápido (alto desempenho) para construir APIs com Python 3.7+, oferece uma excelente solução. Hoje, iremos nos aprofundar nos detalhes da autenticação do FastAPI, explorar como implementá-la e por que é uma mudança de jogo para seus projetos. Além disso, abordaremos como ferramentas como Apidog podem tornar sua vida ainda mais fácil.

botão

Por que FastAPI para suas APIs?

Antes de mergulharmos nos pormenores da autenticação, vamos falar sobre por que você pode escolher FastAPI em primeiro lugar. O FastAPI foi projetado para ser rápido e simples, permitindo que você construa e implante APIs de alto desempenho rapidamente. É construído sobre o Starlette para as partes web e Pydantic para as partes de dados, o que significa que você obtém tanto velocidade quanto confiabilidade.

Framework FastAPI, alto desempenho, fácil de aprender, rápido para codificar, pronto para produção

Principais Benefícios do FastAPI

  1. Desempenho: FastAPI é um dos frameworks Python mais rápidos disponíveis.
  2. Facilidade de Uso: Sua sintaxe é intuitiva e direta, tornando-o acessível até mesmo para iniciantes.
  3. Documentação de API Interativa Automática: O FastAPI gera automaticamente documentação interativa de API com Swagger UI e ReDoc.
  4. Segurança de Tipo: Aproveitando as dicas de tipo do Python, o FastAPI garante um código robusto e livre de erros.

A Importância da Autenticação

Ao construir APIs, proteger com mecanismos de autenticação é essencial para proteger dados sensíveis e garantir que apenas usuários autorizados possam acessar certos pontos finais. A autenticação ajuda a verificar a identidade de usuários ou sistemas que interagem com sua API, proporcionando uma camada de segurança e confiança.

Tipos de Autenticação

O FastAPI suporta múltiplos tipos de autenticação, incluindo:

  • Autenticação Básica: Um método simples que usa um nome de usuário e senha.
  • OAuth2: Um método mais seguro e flexível, muitas vezes usado para autenticação de terceiros.
  • JWT (JSON Web Tokens): Uma forma compacta e auto-contida de transmitir informações de forma segura.

Configurando a Autenticação do FastAPI

Agora, vamos ao cerne da questão—configurando a autenticação no FastAPI. Vamos abordar uma implementação básica do OAuth2 com Senha (e hashing), uma das formas mais comuns e seguras de lidar com autenticação.

Passo 1: Instalar FastAPI e Dependências

Primeiro, certifique-se de que você tem o FastAPI e as dependências necessárias instaladas. Você pode fazer isso usando pip:

pip install fastapi[all] uvicorn

O [all] instala todas as dependências necessárias para autenticação, incluindo pydantic e python-jose para JWT.

Passo 2: Criar uma Aplicação Básica do FastAPI

Vamos começar com uma aplicação simples do FastAPI. Crie um arquivo chamado main.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

Você pode executar esta aplicação usando Uvicorn:

uvicorn main:app --reload

Passo 3: Implementando OAuth2 com Senha

OAuth2 é um framework de autorização amplamente utilizado que fornece fluxos de autorização específicos para diferentes tipos de aplicações. Usaremos OAuth2 com Senha (e hashing) para gerenciar a autenticação.

Criando Modelos de Usuário

Primeiro, defina seus modelos de usuário. Crie um arquivo chamado models.py:

from pydantic import BaseModel

class User(BaseModel):
    username: str
    email: str
    full_name: str
    disabled: bool = False

class UserInDB(User):
    hashed_password: str

Utilitário de Hashing de Senha

Em seguida, você precisará de um utilitário para hashear e verificar senhas. Crie um arquivo chamado security.py:

from passlib.context import CryptContext

pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")

def verify_password(plain_password, hashed_password):
    return pwd_context.verify(plain_password, hashed_password)

def get_password_hash(password):
    return pwd_context.hash(password)

Fluxo de Senha do OAuth2

Agora, configure o Fluxo de Senha do OAuth2. Atualize seu main.py para incluir o seguinte:

from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
from jose import JWTError, jwt
from pydantic import BaseModel
from typing import Optional
import time

# Chave secreta para codificar JWT
SECRET_KEY = "sua_chave_secreta"
ALGORITHM = "HS256"
ACCESS_TOKEN_EXPIRE_MINUTES = 30

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

# Simulação de banco de dados de usuários
fake_users_db = {
    "johndoe": {
        "username": "johndoe",
        "full_name": "John Doe",
        "email": "johndoe@example.com",
        "hashed_password": "$2b$12$...",
        "disabled": False,
    }
}

class Token(BaseModel):
    access_token: str
    token_type: str

class TokenData(BaseModel):
    username: Optional[str] = None

def authenticate_user(fake_db, username: str, password: str):
    user = fake_db.get(username)
    if not user:
        return False
    if not verify_password(password, user["hashed_password"]):
        return False
    return user

def create_access_token(data: dict, expires_delta: Optional[int] = None):
    to_encode = data.copy()
    if expires_delta:
        expire = time.time() + expires_delta
    else:
        expire = time.time() + ACCESS_TOKEN_EXPIRE_MINUTES * 60
    to_encode.update({"exp": expire})
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
    return encoded_jwt

@app.post("/token", response_model=Token)
async def login_for_access_token(form_data: OAuth2PasswordRequestForm = Depends()):
    user = authenticate_user(fake_users_db, form_data.username, form_data.password)
    if not user:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Nome de usuário ou senha incorretos",
            headers={"WWW-Authenticate": "Bearer"},
        )
    access_token = create_access_token(data={"sub": user["username"]})
    return {"access_token": access_token, "token_type": "bearer"}

@app.get("/users/me", response_model=User)
async def read_users_me(token: str = Depends(oauth2_scheme)):
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Não foi possível validar as credenciais",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        username: str = payload.get("sub")
        if username is None:
            raise credentials_exception
        token_data = TokenData(username=username)
    except JWTError:
        raise credentials_exception
    user = fake_users_db.get(username, None)
    if user is None:
        raise credentials_exception
    return user

Este código configura um fluxo de senha OAuth2 simples. Os usuários podem obter um token fornecendo seu nome de usuário e senha ao ponto final /token, e podem usar este token para se autenticar em pontos finais protegidos como /users/me.

Passo 4: Testando sua Autenticação

Para testar sua autenticação, você pode usar uma ferramenta de teste de API como Postman ou Apidog. Aqui está como você pode fazer isso com Apidog:

Criar uma Nova solicitação: Abra o Apidog e crie uma nova solicitação.

Aprimorando sua Autenticação FastAPI com Apidog

Embora o FastAPI torne a configuração da autenticação simples, ferramentas como Apidog podem ainda mais agilizar o processo, fornecendo uma plataforma para projetar, documentar e testar suas APIs. O Apidog oferece uma interface amigável para gerenciar seus pontos finais de API, simular respostas e colaborar com sua equipe.

Interface do Apidog

Benefícios de Usar Apidog

  1. Gestão Abrangente de API: Projete, teste e documente suas APIs em um só lugar.
  2. Colaboração: Trabalhe com sua equipe em tempo real, compartilhe pontos finais e revise mudanças.
  3. Respostas de Simulação: Simule respostas de API para testes sem acessar os pontos finais reais.

Conclusão

O FastAPI simplifica o processo de construir e proteger APIs, tornando-se uma escolha principal para desenvolvedores que procuram desempenho e facilidade de uso. Ao implementar autenticação com o FastAPI, você garante que suas APIs estejam seguras e somente acessíveis a usuários autorizados. Além disso, aproveitando ferramentas como o Apidog, você pode aprimorar sua experiência de desenvolvimento de API, proporcionando capacidades robustas de gestão e teste.

Agora que você sabe como implementar a autenticação do FastAPI, pode proteger suas APIs e proteger seus dados com confiança. Boa codificação!

botão

Junte-se à Newsletter da Apidog

Inscreva-se para ficar atualizado e receber os últimos pontos de vista a qualquer momento.