1
resposta

Dúvida sobre JWT com DRF

Olá pessoal,

Estou desenvolvendo uma API que utiliza JWT token através da lib "djangorestframework-simplejwt", para garantir a segurança dela, gostaria de validar as requisições usando CSRF token, fiz pesquisas mas ainda não entendi como posso fazer isso, poderiam me dar alguma dica?

Desde já, agradeço!!!

1 resposta

Olá Vinicius, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Para adicionar proteção CSRF à sua API do Django Rest Framework (DRF) que usa JWT, você pode usar a classe CSRFExemptSessionAuthentication fornecida pelo DRF. Essa classe é uma subclasse de SessionAuthentication que desativa a proteção CSRF em todas as solicitações autenticadas com sessão, permitindo que você use o JWT para autenticação.

Aqui está um exemplo de como você pode usar CSRFExemptSessionAuthentication para proteger sua API com JWT e CSRF:

Importe CSRFExemptSessionAuthentication da biblioteca DRF no topo do arquivo settings.py da aplicação

from rest_framework.authentication import SessionAuthentication, CSRFExemptSessionAuthentication

Adicione as seguintes linhas à seção REST_FRAMEWORK do seu arquivo settings.py para definir a autenticação padrão e desativar a proteção CSRF para solicitações autenticadas com sessão:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'myapp.authentication.CSRFExemptSessionAuthentication',
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
    ],
}

Crie um novo arquivo chamado authentication.py dentro do diretório do seu aplicativo (por exemplo, myapp/) e adicione o seguinte código:

from rest_framework.authentication import SessionAuthentication

class CSRFExemptSessionAuthentication(SessionAuthentication):
    def enforce_csrf(self, request):
        return

Após adicionar essas configurações ao seu arquivo settings.py, salve-o e reinicie o servidor de desenvolvimento (caso esteja usando um). Sua API agora estará protegida contra ataques CSRF e autenticada usando JWT.

Todavia, vale ressaltar que como é um assunto externo ao curso e que não tenho acesso ao cenário completo do projeto, pode ocorrer a necessidade de realizar outros testes a fim de obter o resultado esperado, mas espero que esta resposta seja um bom ponto de partida para a resolução do seu problema.

Espero ter ajudado. Continue mergulhando em conhecimento!

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!