La autenticación basada en tokens o token authentication es un método de autenticación que permite a los usuarios demostrar su identidad sin tener que compartir una contraseña. Esta es una forma de autenticación muy utilizada en aplicaciones web, como APIs, que es altamente segura y fácil de implementar.
En Django, uno de los frameworks de desarrollo web más populares que utiliza el lenguaje Python, se puede implementar la autenticación basada en tokens con la ayuda de paquetes como Django Rest Framework o django-allauth.
A continuación te daré un ejemplo de cómo implementar esta autenticación en Django utilizando Django Rest Framework (DRF), un marco de trabajo poderoso y flexible para construir APIs web.
Primero, necesitarás instalar DRF, lo cual puedes hacer con pip:
`
pip install djangorestframework
`
Luego, a tu archivo de configuración de Django, `settings.py`, añade `‘rest_framework’` y `‘rest_framework.authtoken’` a tu `INSTALLED_APPS`:
```python
INSTALLED_APPS = [
…
‘rest_framework’,
‘rest_framework.authtoken’,
…
]
```
También debes agregar el TokenAuthentication a tus configuraciones de `REST_FRAMEWORK` en `settings.py`:
```python
REST_FRAMEWORK = {
‘DEFAULT_AUTHENTICATION_CLASSES’: [
‘rest_framework.authentication.TokenAuthentication’,
],
}
```
Podrías requerir que se cree Token cada vez que se crea un usuario. Para esto, puedes conectar la signal `post_save` del modelo User a una función que crea el Token. Añade lo siguiente a tu archivo `models.py`:
```python
from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from rest_framework.authtoken.models import Token
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
if created:
Token.objects.create(user=instance)
```
Finalmente, para usar la autenticación con tokens en cualquier vista, tienes que agregar la clase `TokenAuthentication` a la propiedad `authentication_classes` de tu vista, como se describe en la documentación de DRF:
```python
from rest_framework.authentication import TokenAuthentication
class MyView(APIView):
authentication_classes = [TokenAuthentication]
…
```
En este punto, cada vez que crees un usuario, se generará automáticamente un Token. Para autenticarte con este token, debes incluirlo en el encabezado de tu solicitud de la siguiente manera: `Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b`.
Fuentes: Django Rest Framework Documentation (https://www.django-rest-framework.org/api-guide/authentication/), Django Documentation (https://docs.djangoproject.com/en/3.1/topics/signals/).