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!