En la entrega anterior, revisamos los conceptos básicos y el funcionamiento de OAuth2. En este artículo, nos centraremos en cómo configurar un servidor de autenticación OAuth2 utilizando Django OAuth Toolkit (DOT).


1. Instalación de Django OAuth Toolkit

Para implementar un servidor OAuth2, primero necesitamos instalar Django OAuth Toolkit (DOT). Se puede instalar con un simple comando:

pip install django-oauth-toolkit

Una vez completada la instalación, se debe agregar oauth2_provider a INSTALLED_APPS y ejecutar las migraciones. Después de la migración, podrá ver los menús adicionales que DOT proporciona en la página de administración de Django.


2. Revisión de los nuevos menús en Admin

Al instalar DOT, se añadirán los siguientes 5 menús a Django Admin:

1) Access tokens

  • Gestiona los tokens de acceso emitidos.
  • Se puede verificar la duración de cada token, las aplicaciones cliente relacionadas y la información del usuario.
  • El token de acceso es una clave utilizada por un cliente autenticado para acceder a recursos protegidos.

2) Refresh tokens

  • Gestiona los tokens de actualización.
  • Se utilizan para obtener un nuevo token de acceso cuando el token de acceso ha expirado.
  • Esto permite a los usuarios realizar tareas continuas sin necesidad de reautenticarse.

3) Application

  • Registra y gestiona aplicaciones cliente OAuth2.
  • Las aplicaciones deben registrarse para comunicarse con el servidor de autenticación y se proporcionan varios campos de configuración.

4) Grant

  • Gestiona el código de autorización.
  • El código de autorización es una clave temporal necesaria para que la aplicación cliente solicite un token de acceso.

5) ID tokens

  • Gestiona los tokens de ID emitidos.
  • El token de ID se utiliza cuando se combinan OAuth2 y OpenID Connect (OIDC), e incluye la información de autenticación del usuario y de la aplicación cliente.
  • Se utiliza cuando el cliente obtiene información del usuario aprovechando el protocolo OpenID Connect.

3. Descripción detallada del menú Application

El núcleo del servidor OAuth2 es el registro de aplicaciones cliente. En el menú Application, se pueden configurar los siguientes campos:

1) Nombre

El nombre de la aplicación. Debe ser claro para que el administrador pueda identificarlo fácilmente.

2) Client ID

El identificador único de la aplicación. Se utiliza para identificar al cliente en el servidor OAuth2 y se genera automáticamente.

3) Client Secret

La clave secreta utilizada durante la autenticación del cliente. Se aplica solo a aplicaciones de servidor (Confidential) y debe almacenarse de manera segura.

4) Client Type

El tipo de aplicación cliente:

  • Confidential: aplicaciones de servidor capaces de almacenar la clave secreta de manera segura.
  • Public: aplicaciones móviles o SPA (Single Page Application) que no pueden almacenar la clave secreta.

5) Authorization Grant Type

El método de autenticación que usará la aplicación cliente. Opciones principales:

  • Authorization Code: el método más común y seguro.
  • Password: autenticación directa mediante la entrada del nombre de usuario/contraseña del usuario.
  • Client Credentials: adecuado para la comunicación entre servidores.

6) Redirect URIs

URL de la aplicación cliente a la que se enviará el Authorization Code o el Access Token después de la autenticación exitosa.

  • Importante: debe coincidir exactamente con la configuración del lado del cliente.
  • Si las URL no coinciden, el servidor OAuth2 no enviará el código de autorización ni el token.
  • Se recomienda usar HTTPS por razones de seguridad.

7) Algorithm

Especifica el algoritmo utilizado para la encriptación del token. El valor por defecto es RS256, que es un algoritmo de firma basado en RSA.

  • RS256: utiliza cifrado asimétrico y verifica la firma con la clave pública.
  • Se puede cambiar a otro algoritmo según sea necesario.

8) Skip Authorization

Si se configura en True, otorga automáticamente permisos a la aplicación cliente sin la aprobación del usuario. Esto es útil en sistemas internos o aplicaciones de confianza.


4. Resumen y próximos pasos

En este artículo, hemos explorado cómo configurar un servidor de autenticación OAuth2 centrado en el menú Admin de Django OAuth Toolkit (DOT) y, en particular, en el campo Application. Esto nos ha permitido comprender el proceso de registro de aplicaciones cliente y el papel de cada campo.

En el próximo artículo, profundizaremos en el Client Type mencionado en este post. En particular, compararemos los tipos Confidential y Public y explicaremos cómo se utilizan estos dos tipos en OAuth2. También planeamos abordar lo siguiente:

  • La relación entre Client Type y PKCE: por qué PKCE (Proof Key for Code Exchange) es importante para los clientes públicos.
  • El papel del Client Secret: cómo se utiliza la clave secreta en clientes confidenciales.
  • El flujo del método Authorization Code y PKCE: desglosaremos el núcleo del Grant Type más estandarizado utilizado en OAuth2.

Para entender claramente el flujo del método Authorization Code, es esencial conocer la interacción entre PKCE y Client Type. En el próximo artículo, abordaremos este tema en profundidad.

Flujo de Grant de Código de Autorización OAuth 2.0