1
resposta

Como aplicar o oauth no django rest framework ?

Olá, gostaria de saber como é possível aplicar essa estrutura de autenticação social para uma api desenvolvida em DRF, a autenticação nesse cenário deve ser feita também pelo django, correto ?

1 resposta

Olá, João.

Tudo bem?

Para implementar a autenticação OAuth2.0 no Django Rest Framework (DRF), você pode utilizar a biblioteca django-oauth-toolkit, que é uma das mais populares para essa finalidade. Veja esse exemplo básico para configurar essa autenticação.

  1. Instale as bibliotecas necessárias:

    pip install django-oauth-toolkit
    pip install djangorestframework
    
  2. Adicione as bibliotecas ao seu settings.py:

    INSTALLED_APPS = [
        ...
        'oauth2_provider',
        'rest_framework',
        'rest_framework.authtoken',
    ]
    
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.BasicAuthentication',
        ),
        'DEFAULT_PERMISSION_CLASSES': (
            'rest_framework.permissions.IsAuthenticated',
        ),
    }
    
  3. Configure URLs no seu urls.py:

    from django.urls import path, include
    
    urlpatterns = [
        ...
        path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
    ]
    
  4. Crie um aplicativo OAuth2 no Django Admin:

    • Acesse o Django Admin.
    • Vá para "Applications" e crie uma nova aplicação.
    • Preencha os campos necessários, como nome, cliente, tipo de cliente (confidential/public), e redirecionamento URI.
  5. Proteja suas views com permissões:

    from rest_framework.views import APIView
    from rest_framework.response import Response
    from rest_framework.permissions import IsAuthenticated
    
    class ProtectedResource(APIView):
        permission_classes = [IsAuthenticated]
    
        def get(self, request):
            return Response(data={"message": "This is a protected resource"})
    
  6. Obtenha um token de acesso: Para testar, você pode usar ferramentas como Postman ou cURL para obter um token de acesso. Por exemplo:

    curl -X POST -d "grant_type=password&username=yourusername&password=yourpassword" -u"client_id:client_secret" http://localhost:8000/o/token/
    
  7. Use o token para acessar recursos protegidos: Depois de obter o token, você pode usá-lo para acessar recursos protegidos, adicionando-o no cabeçalho da requisição:

    curl -H "Authorization: Bearer your_access_token" http://localhost:8000/your_protected_resource/
    

Espero ter ajudado e bons estudos!