Cómo construir un sistema de autenticación social en Django usando OAuth
Aprenda a crear un sistema de inicio de sesión seguro con cuentas de redes sociales en Django usando OAuth.
La autenticación social es una forma de confirmar la identidad de una persona a través de una cuenta social en lugar de utilizar contraseñas. En el desarrollo web, siempre resulta útil autenticar usuarios sin contraseñas. De esta manera, pueden iniciar sesión a través de aplicaciones sociales como Google, Twitter o GitHub.
Habilitar la autenticación social es una excelente manera de mejorar la seguridad de su aplicación al reducir el riesgo de vulnerabilidades comunes relacionadas con las contraseñas. También mejorará la experiencia del usuario de su aplicación porque los usuarios no necesitarán recordar muchas contraseñas.
Autenticación de usuario en Django
Django proporciona un sistema de autenticación predeterminado para que trabajen los desarrolladores. Sin embargo, este sistema de autenticación utiliza la autenticación tradicional, que implica recopilar manualmente datos como el nombre de usuario, correo electrónico, contraseña, nombre y apellido del usuario.
Por diseño, el sistema de autenticación de Django es muy genérico y no proporciona muchas de las funciones que se utilizan en la mayoría de los sistemas de autenticación web actuales. Para complementar esto, querrás utilizar paquetes de terceros como el paquete django-allauth.
Cómo habilitar OAuth en Django
Para autenticar a sus usuarios usando OAuth en una aplicación Django, puede usar un paquete Django llamado django-allauth.
Django Allauth es un paquete que maneja la autenticación, el registro, la administración de cuentas y la autenticación de cuentas de terceros (sociales) para su proyecto Django. Los siguientes pasos lo guiarán hacia la configuración de Django Allauth para su proyecto Django.
Paso 1: instalar y configurar Django-Allauth
Si aún no lo has hecho, crea un entorno virtual e instala django-allauth mediante pip:
pip install django-allauth
Tenga en cuenta que debe utilizar Python 3.5 o superior y Django 2.0 o superior para que funcione.
Paso 2: agregue las aplicaciones necesarias a Django para Django-Allauth
Después de instalar django-allauth, abra su archivo settings.py y agregue las siguientes aplicaciones a su lista INSTALLED_APPS:
INSTALLED_APPS = [
"""
Add your other apps here
"""
# Djang Allauth configuration apps
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
Aquí hay algunos puntos a tener en cuenta sobre algunas de las aplicaciones anteriores:
- La aplicación allauth.socialaccount permitirá a los usuarios iniciar sesión a través de aplicaciones sociales como X (anteriormente Twitter), Instagram, GitHub y otras.
- La aplicación django.contrib.sites es un marco de Django integrado que se requiere para que django-allauth funcione. La aplicación brinda la capacidad de administrar y diferenciar múltiples sitios dentro de un solo proyecto Django. Puedes entender cómo funciona consultando la documentación de Django.
Paso 3: Defina los backends de autenticación para su proyecto
El siguiente paso es definir cómo desea autenticar a sus usuarios. Puedes hacer esto configurando AUTHENTICATION_BACKENDS en tu archivo settings.py. Para django-allauth, debes agregar estos:
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
]
El fragmento de código anterior define dos motores de autenticación:
- El primero es el predeterminado utilizado por Django. Esto permitirá que el usuario administrador inicie sesión en el panel de administración independientemente de la configuración de django-allauth.
- El segundo define el backend de autenticación para django-allauth.
Paso 4: agregue la identificación de su sitio
En su archivo de configuración, debe agregar la ID de su sitio. He aquí un ejemplo:
SITE_ID = 1
De forma predeterminada, hay un sitio llamado ejemplo.com en el panel de administración. Puede decidir modificar este sitio o agregar uno usted mismo. En cualquier caso, debes iniciar sesión en el panel de administración y navegar hasta la aplicación Sites.
Para obtener el ID del sitio para un sitio Django, abra su interfaz de línea de comandos (CLI) y ejecute este comando:
python manage.py shell
A continuación, escriba este script en el shell de Python:
from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
site_id = current_site.id
site_name = current_site.name
print("Site ID:", site_id)
print("Site Name:", site_name)
El código anterior imprimirá el nombre del sitio así como su ID.
Paso 5: configure sus URL
En el archivo urls.py de su proyecto, configure el patrón de URL para django-allauth. Así es como debería verse:
from django.urls import path, include
urlpatterns = [
# Djang-allauth url pattern
path('accounts/', include('allauth.urls')),
]
Con esta configuración, puede iniciar su servidor de desarrollo y navegar a http://127.0.0.1:8000/accounts/. Si tiene DEBUG configurado en True, debería ver una lista de patrones de URL disponibles para django-allauth.
Si ha hecho lo anterior, su proyecto debería estar listo para la autenticación social.
Cómo implementar el inicio de sesión/registro de Google en su aplicación Django
Después de configurar django-allauth, debería estar listo para permitir que sus usuarios se autentiquen con sus cuentas sociales como Google.
Paso 1: registre su proveedor de cuenta social en sus aplicaciones instaladas
En su archivo settings.py, debe agregar el proveedor de la cuenta social en INSTALLED_APPS. En este caso, es Google. Otras opciones son Instagram, X, etc.
INSTALLED_APPS = [
"""
Add your other apps here
"""
# Social account provider (google)
'allauth.socialaccount.providers.google',
]
Paso 2: cree su ID de cliente y clave secreta en Google
Para completar este paso, debes tener una cuenta de Google creada. Si lo ha hecho, siga estos siguientes pasos:
Dirígete a la consola de Google Cloud para crear un nuevo proyecto. Primero, haga clic en el menú desplegable que se muestra en la imagen a continuación:
A continuación, haga clic en NUEVO PROYECTO:
Ingrese un nombre para su proyecto, luego haga clic en el botón CREAR:
Con su proyecto seleccionado, haga clic en el menú de hamburguesas. Seleccione API y servicios y, luego, Credenciales:
A continuación, haga clic en la opción que dice CONFIGURAR PANTALLA DE CONSENTIMIENTO y seleccione Externo:
En la página siguiente, ingrese un nombre para su aplicación e incluya un correo electrónico cuando sea necesario. También puede explorar las configuraciones para realizar algunas personalizaciones. Una vez hecho esto, haga clic en GUARDAR Y CONTINUAR.
En el menú de la izquierda, seleccione Credenciales. Después de eso, haga clic en CREAR CREDENCIALES y seleccione ID de cliente de OAuth.
A continuación, seleccione el tipo de aplicación e ingrese un nombre para la misma. Para este tutorial, el tipo de aplicación será aplicación web.
A continuación, agregue URI para los orígenes de JavaScript autorizados y los URI de redireccionamiento autorizados. El host de su sitio web debe ser el origen de JavaScript y el sistema redirigirá a los usuarios al URI de redireccionamiento después de la autenticación. El URI de redireccionamiento normalmente debe contener tu-nombre-de-host/accounts/google/login/callback /. Para el modo de desarrollo, será: http://127.0.0.1:8000/accounts/google/login/callback/. Haga clic en CREAR cuando haya terminado.
Después de crear las credenciales, puede copiar su ID de cliente o su secreto de cliente a un lugar seguro o descargarlos como archivos JSON.
Paso 3: agregue su ID de cliente y clave secreta a su aplicación Django
Después de crear las credenciales necesarias, navegue hasta http://127.0.0.1:8000/admin, seleccione Aplicaciones sociales y cree una nueva aplicación social. Siga estos pasos para crear una nueva aplicación social:
- Agregue un proveedor. El proveedor se refiere a la aplicación con la que estás autenticando a tu usuario. En este caso es Google, en otro caso podría ser Snapchat.
- Ingrese un nombre para su nueva aplicación social. Asegúrate de que sea un nombre razonable.
- Pega el ID de cliente que copiaste de Google.
- Para la Clave secreta, pegue el Secreto de cliente que copió de Google.
- El campo Clave no se aplica a la autenticación con Google, así que ignórelo.
- Finalmente, seleccione un sitio para asociar la aplicación social.
Paso 4: prueba tu autenticación de Google
Cierre sesión en su panel de administración y navegue hasta http://127.0.0.1:8000/accounts/login/. Verás una opción para iniciar sesión a través de Google.
Haga clic en él para redirigir a la pantalla de consentimiento. A continuación, seleccione una cuenta para iniciar sesión.
Una vez que haya seleccionado una cuenta, será redirigido a http://127.0.0.1:8000/accounts/profile/. Esto significa que su aplicación está funcionando perfectamente. Puede crear plantillas personalizadas para reemplazar las predeterminadas.
Mejora del registro de usuarios con autenticación social en Django
Habilitar la autenticación social es una excelente manera de ayudar a sus usuarios a tener una excelente experiencia al registrarse en su aplicación. Hay otras formas de habilitar la autenticación en Django y debes explorarlas para decidir cuál es la mejor para tu caso de uso.