OAuth 2.1

Flujo de autorización

Authorization Code con PKCE paso a paso — el único flujo soportado en OAuth 2.1 de Whatalo.

Whatalo implementa el flujo Authorization Code con PKCE conforme a OAuth 2.1. PKCE es obligatorio — no existe ningún flujo implícito ni de credenciales de cliente para acceso en nombre de usuarios.

Prerrequisitos

  • client_id obtenido via registro dinámico
  • URI de redirección registrada exactamente como la usarás

Paso 1 — Genera el par PKCE

import { randomBytes, createHash } from "crypto";

// code_verifier: 43–128 caracteres URL-safe aleatorios
const codeVerifier = randomBytes(32).toString("base64url");

// code_challenge: SHA-256 del verifier, codificado en base64url
const codeChallenge = createHash("sha256")
  .update(codeVerifier)
  .digest("base64url");

Solo se acepta code_challenge_method=S256. El método plain está explícitamente rechazado conforme a OAuth 2.1.

Paso 2 — Redirige al usuario al endpoint de autorización

Construye la URL y redirige:

GET https://app.whatalo.com/oauth/authorize?
  response_type=code
  &client_id=abc123def456ghi789jkl012
  &redirect_uri=https%3A%2F%2Fmi-app.com%2Foauth%2Fcallback
  &scope=read%3Aproducts%20read%3Aorders
  &state=VALOR_OPACO_ALEATORIO
  &code_challenge=THE_CHALLENGE_B64URL
  &code_challenge_method=S256
  &resource=https%3A%2F%2Fapi.whatalo.com

Parámetros de la solicitud

ParámetroRequeridoDescripción
response_typeSiempre code
client_idEl client_id de tu registro
redirect_uriDebe coincidir exactamente con una URI registrada
scopeScopes separados por espacio. Ver Scopes
stateValor opaco aleatorio. Valídalo al recibir el callback para evitar CSRF
code_challengeSHA-256 del code_verifier, en base64url
code_challenge_methodSiempre S256
resourceNoRFC 8707. Indica el servidor de recurso destino. Política de valor único.

¿Qué ve el usuario?

El usuario ve la pantalla de consentimiento de Whatalo donde:

  1. Inicia sesión (si no lo ha hecho)
  2. Selecciona la tienda que quiere conectar
  3. Revisa los permisos que solicita tu app
  4. Aprueba o rechaza

Vinculación por tienda: el access_token emitido queda vinculado a la tienda que el usuario seleccionó. Si tu app necesita acceder a múltiples tiendas del mismo usuario, inicia un flujo de autorización separado por cada tienda.

Paso 3 — Recibe el código de autorización

Whatalo redirige de vuelta a tu redirect_uri:

GET https://mi-app.com/oauth/callback?code=AUTH_CODE_AQUI&state=VALOR_OPACO_ALEATORIO

Valida que state coincida con el valor que enviaste antes de continuar. Si no coincide, descarta el código — es posible un ataque CSRF.

El código de autorización:

  • Es de un solo uso
  • Expira en 10 minutos
  • Está vinculado a tu code_verifier via PKCE

Paso 4 — Intercambia el código por tokens

Llama al token endpoint con el código y el code_verifier:

POST https://app.whatalo.com/oauth/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&code=AUTH_CODE_AQUI
&redirect_uri=https%3A%2F%2Fmi-app.com%2Foauth%2Fcallback
&client_id=abc123def456ghi789jkl012
&code_verifier=EL_CODE_VERIFIER_ORIGINAL

Recibirás un access_token y un refresh_token. Ver Token endpoint para el detalle completo.

Requisitos de URI de redirección

CasoPermitido
https:// en producción
http://localhost o http://127.0.0.1Sí (solo desarrollo)
http:// en dominios públicosNo
Substring de una URI registradaNo — debe coincidir exactamente
Múltiples URIs registradasSí, hasta 10 por cliente

Siguiente paso

Con los tokens obtenidos, úsalos para llamar a la API de Whatalo con Authorization: Bearer <access_token>. Cuando el access token expire, usa el token endpoint con grant_type=refresh_token.

On this page