Skip to content

[Auth] Refresh token apenas httpOnly Cookie #34

@DevlTz

Description

@DevlTz

Atualmente o refresh token é retornado no body da resposta e armazenado no frontend (localStorage ou similar), o que o expõe a ataques XSS. Esta issue move o refresh token para um cookie httpOnly, eliminando esse vetor de ataque.

Critérios de aceitação

Backend

  • Criar CookieTokenRefreshView customizada sobrescrevendo TokenRefreshView do SimpleJWT
  • Criar CookieLoginView customizada sobrescrevendo TokenObtainPairView
  • No login, setar cookie httpOnly com o refresh token:
    • httponly=True
    • samesite="Lax"
    • secure=True em produção (DEBUG=False)
    • max_age igual ao REFRESH_TOKEN_LIFETIME do SimpleJWT
  • No refresh, ler o token do cookie em vez do body
  • No logout, deletar o cookie além de blacklistar o token
  • Access token continua sendo retornado no body normalmente

Configuração

  • Adicionar COOKIE_SECURE ao settings.py controlado por DEBUG
  • Atualizar .env.example com variável de domínio do cookie se necessário

URLs

  • Substituir URLs de login e refresh pelas views customizadas em config/urls.py

Testes

  • Login seta cookie httpOnly na response
  • Refresh lê cookie e retorna novo access token
  • Logout deleta cookie e blacklista token
  • Request sem cookie retorna 401

Observações

  • O access token não muda — apenas o refresh token vai pro cookie
  • CORS_ALLOW_CREDENTIALS = True precisa ser adicionado ao settings.py para o frontend conseguir enviar o cookie
  • Testar com Postman habilitando cookies nas configurações da collection

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions