Revocación de tokens (RFC 7009)
Revoca access tokens o refresh tokens activos de forma inmediata.
El endpoint de revocación (RFC 7009) permite invalidar un token activo. Es idempotente: siempre devuelve 200 OK aunque el token no exista o ya estuviera revocado.
Endpoint
POST https://app.whatalo.com/oauth/revoke
Content-Type: application/x-www-form-urlencodedAutenticación requerida
Los clientes confidenciales deben autenticarse con HTTP Basic o body params:
POST /oauth/revoke
Content-Type: application/x-www-form-urlencoded
Authorization: Basic BASE64(client_id:client_secret)
token=EL_TOKEN_A_REVOCAR
&token_type_hint=refresh_tokenLos clientes públicos solo envían client_id sin secreto:
token=EL_TOKEN_A_REVOCAR
&client_id=abc123def456ghi789jkl012
&token_type_hint=access_tokenParámetros
| Parámetro | Requerido | Descripción |
|---|---|---|
token | Sí | El token a revocar (access token o refresh token) |
token_type_hint | No | access_token o refresh_token — sugerencia para acelerar la búsqueda interna |
Respuesta
HTTP/1.1 200 OKNo hay cuerpo de respuesta. 200 OK se devuelve siempre, incluso si el token no existía.
Caso de uso principal: cierre de sesión
Cuando el usuario cierra sesión en tu app, revoca tanto el access_token como el refresh_token:
async function logout(accessToken, refreshToken, clientId, clientSecret) {
const credentials = Buffer.from(`${clientId}:${clientSecret}`)
.toString("base64");
const headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Authorization": `Basic ${credentials}`,
};
// Revoke both tokens — order doesn't matter
await Promise.all([
fetch("https://app.whatalo.com/oauth/revoke", {
method: "POST",
headers,
body: new URLSearchParams({
token: accessToken,
token_type_hint: "access_token",
}),
}),
fetch("https://app.whatalo.com/oauth/revoke", {
method: "POST",
headers,
body: new URLSearchParams({
token: refreshToken,
token_type_hint: "refresh_token",
}),
}),
]);
}Revocación en cascada desde Whatalo
Nota crítica para integraciones: cuando un comerciante revoca una app conectada desde la interfaz de ajustes de Whatalo, todos los access_token y refresh_token de esa combinación (cliente, usuario, tienda) se revocan de forma atómica e inmediata.
Si tu Resource Server cachea respuestas active: true del endpoint de introspección por más de 60 segundos, seguirá aceptando tokens revocados durante ese intervalo.
Efecto en introspección después de la revocación
Inmediatamente después de revocar un token, el endpoint de introspección devuelve:
{ "active": false }Incluso si el token no hubiera expirado aún.
Frecuencia recomendada de caché
| Respuesta de introspección | TTL de caché recomendado |
|---|---|
active: true | Máximo 60 segundos |
active: false | No cachear |
Esto garantiza que una revocación iniciada por el usuario tenga efecto en tu sistema en menos de un minuto.