Implementación de Client Credentials Flow en Discord

Clase 17 de 25Curso de OAuth 2.0 y OpenID Connect: Flujos de Autenticación y Casos de Estudio

Resumen

¿Cómo implementar el Cloud Credentials Flow con Discord?

Conectar servicios de manera eficaz es esencial en múltiples proyectos tecnológicos. El Cloud Credentials Flow, específicamente con Discord, permite visualizar cómo podemos autenticar servicios entre sí sin necesidad de intervención manual, impulsando automación y optimización de procesos. Este uso en Discord es relevante para pruebas rápidas y el desarrollo de bots, pero también permite profundizar en la comprensión de flujos de autenticación basada en máquinas.

¿Qué pasos seguir para crear una aplicación en Discord?

Para implementar este flujo, necesitas crear una aplicación en el portal de desarrolladores de Discord. Sigue estos pasos:

  1. Accede a discord.com/developers/applications.
  2. Haz clic en "Create Application" y asígnale un nombre, por ejemplo, "Client Credentials Discord".
  3. Acepta los términos y condiciones.

¿Cómo configurar el OAuth 2 en la aplicación de Discord?

Al continuar, identificarás los elementos clave para autenticación:

  1. Navega a la pestaña de OAuth 2 dentro de tu aplicación en Discord.
  2. Copia el client_id y expón el client_secret, ingresando tu código de autenticación si es necesario.
  3. Asegúrate de no confundir el Application ID y las Public Keys, ya que tienen otros propósitos.

¿Qué es un servidor de Express y cómo se configura?

Implementarás un servidor sencillo de Express. A continuación, los pasos esenciales:

  1. Define las variables de entorno para client_id y client_secret.
  2. Establece URLs para consumir tokens y endpoints correspondientes a Discord.
  3. Define los scopes necesarios: identify y guilds para acceder respectivamente a datos de usuario y servidores.

Con lo anterior definido, el esquema de autenticación se parecerá al siguiente:

const express = require('express');
const fetch = require('node-fetch');
require('dotenv').config();

const app = express();
const DISCORD_TOKEN_URL = 'https://discord.com/api/oauth2/token';
const client_id = process.env.CLIENT_ID;
const client_secret = process.env.CLIENT_SECRET;
const scopes = 'identify guilds';

app.listen(3005, () => {
  console.log('Server running on http://localhost:3005');
});

¿Cómo se lleva a cabo la solicitud de autenticación en Discord?

El flujo de solicitud es directo y se realiza de la siguiente manera:

  1. Realiza un request de autenticación a Discord usando tu client_id y client_secret.
  2. Se requiere establecer el grant_type como "client_credentials".
  3. Espera por un access_token, el cual renombrarás para su uso posterior en camelCase.
const params = new URLSearchParams();
params.append('client_id', client_id);
params.append('client_secret', client_secret);
params.append('grant_type', 'client_credentials');
params.append('scope', scopes);

fetch(DISCORD_TOKEN_URL, {
  method: 'POST',
  body: params,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
})
.then(response => response.json())
.then(data => {
  const accessToken = data.access_token;
  fetchWithToken(accessToken);
})
.catch(console.error);

¿Cómo consumir datos de usuarios y servidores en Discord?

La autenticación te conducirá a la posibilidad de interactuar con los datos de usuario y servidores de Discord. Configura el fetch para esta interacción:

  1. Utiliza el access token como Authorization Bearer.
  2. Realiza solicitudes a los endpoints deseados para obtener y manejar la información requerida.
function fetchWithToken(token) {
  const options = {
    headers: {
      'Authorization': `Bearer ${token}`,
    },
  };

  // Fetch user data
  fetch('https://discord.com/api/users/@me', options)
    .then(response => response.json())
    .then(userData => console.log(userData))
    .catch(console.error);

  // Fetch guild data
  fetch('https://discord.com/api/users/@me/guilds', options)
    .then(response => response.json())
    .then(guildData => console.log(guildData))
    .catch(console.error);
}

¿Cuáles son los usos y retos del Client Credentials Flow?

Este flujo es ideal para integraciones máquina a máquina, donde no se requiere interacción humana directa. Es eficiente para:

  • Desarrollar bots para Discord.
  • Integración de microservicios.
  • Comandos API a API desde la terminal.

Como reto, intenta implementar Client Credentials en un servicio distinto a Discord para ampliar tu entendimiento práctico y fortalecer tus habilidades de integración API. Recuerda que la perseverancia y la práctica constante son claves en el mundo del desarrollo tecnológico. ¡Sigue aprendiendo y experimentando con nuevas integraciones!