Errores y problemas

Rest API y autenticación JWT: evitar 401 y proteger wp-json

¿Te preocupa que tus peticiones a wp-json devuelvan 401 o que los tokens JWT fallen en producción? Esta guía ofrece pasos concretos, configuraciones y comprobaciones para recuperar la autenticación, endurecer el sistema y automatizar la renovación de tokens en proyectos WordPress.

Índice

Anuncio

Puntos clave: Lo que debes saber en 1 minuto

Rest API y autenticación JWT: evitar 401 y proteger wp-json

Por qué falla la autenticación JWT en wp-json

La autenticación JWT en la Rest API de WordPress puede fallar por múltiples razones; agruparlas ayuda a priorizar la resolución:

Cabeceras Authorization no llegan al entorno PHP

Token mal formado, expirado o con firma inválida

Algoritmo inconsistente (HS256 vs RS256)

Conflictos entre plugins o filtros de autenticación

Permisos y capacidades del usuario

Nonces y CSRF en peticiones desde el frontend

Diferencias en la URL base y dominios (issuer/aud)

Anuncio

Soluciones para error 401 y tokens inválidos

Resolver 401 exige un flujo de diagnóstico y acciones concretas:

Diagnóstico rápido (checklist)

Reparaciones servidor/hosting

RewriteEngine On RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

location ~ .php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param HTTP_AUTHORIZATION $http_authorization; include fastcgi_params; }

Reparaciones en WordPress y plugins

Validar claims y tolerancia de reloj

Revocar/rotar claves sin bloquear usuarios

rest api autenticacion en contexto real

Configurar cabeceras CORS y Authorization en REST

CORS mal configurado es causa habitual de fallos en SPAs y apps móviles.

Principios prácticos

Ejemplo nginx para CORS (server block)

if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' 'https://app.midominio.com'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, X-WP-Nonce'; add_header 'Access-Control-Max-Age' 3600; return 204; }

Añadir X-WP-Nonce cuando aplica

Ajustes en WordPress (snippet útil)

add_action('rest_api_init', function() { header('Access-Control-Allow-Origin: https://app.midominio.com'); header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE'); header('Access-Control-Allow-Headers: Authorization, Content-Type, X-WP-Nonce'); }, 15);

Plugins recomendados para JWT y seguridad WordPress

A continuación una comparativa práctica de soluciones y casos de uso.

Plugin Ventaja Limitación
JWT Authentication for WP REST API Fácil implementación, compatible con muchas bibliotecas cliente. Usa HS256 por defecto; requiere ajustes manuales para RS256 y rotación de claves.
Application Passwords (Core WP) Integrado en WP, simple para integraciones server-to-server. No es JWT; no apto para SPAs que necesitan refresh tokens.
Wordfence / Sucuri Defensa perimetral, bloqueo de IPs y alertas de seguridad. No gestiona JWT nativamente; complementario.

Recomendación: para proyectos empresariales, preferir una arquitectura con RS256 y JWKS (clave pública distribuida) o usar un Identity Provider (IdP) externo compatible con OpenID Connect si el alcance lo justifica.

Anuncio

Depurar endpoints REST: logs, nonces y permisos

Depuración ordenada acelera resolución.

Habilitar logging seguro

Comprobar rest_authentication_errors

add_filter('rest_authentication_errors', function($result) { if (!empty($result)) return $result; // comprobar autorización personalizada return $result; });

Revisar nonces vs tokens

Validar permisos por endpoint

'permission_callback' => function($request) { return current_user_can('edit_posts'); }

Ejemplos multi-stack para debug

Prevención: expiración de token y renovación automática

Un diseño seguro de tokens evita accesos permanentes y facilita revocación.

Estrategia recomendada (nivel empresarial)

Implementación simple con WP

Evitar fallos comunes en SPAs

Flujo de autenticación JWT simplificado

Flujo JWT: emisión, uso y renovación

🔐 Paso 1 → Cliente envía credenciales a /auth (POST)

📝 Paso 2 → Servidor valida, emite access token (corto) + refresh token (largo)

🔁 Paso 3 → Cliente usa access token en Authorization: Bearer

Paso 4 → Si expira, cliente solicita nuevo access con refresh token

Resultado → Sesión continua sin re-login y posibilidad de revocación centralizada

Anuncio

Ventajas, riesgos y errores comunes

Beneficios / cuándo aplicar ✅

Errores que debes evitar / Riesgos ⚠️

Preguntas frecuentes

¿Por qué recibo 401 aunque el token parezca correcto?

Comprobar primero que la cabecera Authorization llega al proceso PHP. Si llega, validar firma y claims (exp, iat, aud); normalmente el fallo está en signature o secret.

¿Cómo paso Authorization en Apache y Nginx?

En Apache usar RewriteRule para exponer HTTP_AUTHORIZATION; en Nginx añadir fastcgi_param HTTP_AUTHORIZATION $http_authorization al bloque PHP-FPM.

¿Es mejor HS256 o RS256 para WordPress?

RS256 (firma asimétrica) es más seguro en arquitecturas distribuidas porque la clave privada no necesita compartirse; HS256 es más sencillo pero obliga a gestionar secrets con mucho cuidado.

¿Cómo implementar refresh tokens en WordPress?

Crear endpoint seguro /auth/refresh, almacenar refresh_token_hash en base de datos y emitir nuevo access token tras validar y comprobar estado de revocación.

¿Puedo usar JWT con Application Passwords de WordPress?

Son mecanismos distintos. Application Passwords son útiles server-to-server; JWT mejor para SPAs y móviles donde se necesita control de sesión y refresh.

¿Qué herramientas ayudan a depurar JWT en WP?

Postman, curl, jwt.io para decodificar, y WP_DEBUG_LOG para capturar errores del plugin o filtros que afecten rest_authentication_errors.

Conclusión

La autenticación JWT en la Rest API de WordPress es potente pero sensible a configuración de cabeceras, algoritmos y gestión de claves. Con una estrategia de claves, revocación y renovación de tokens bien implementada, los fallos 401 se reducen drásticamente y la seguridad mejora.

Siguientes acciones

  1. Revisar y corregir el paso de la cabecera Authorization en servidor (Apache/Nginx) y proxies.
  2. Implementar refresh tokens con almacenamiento seguro y revocación (tabla de sesiones) en staging.
  3. Migrar a RS256/JWKS si la arquitectura implica múltiples servicios o equipos.
RESUMIR CON IA: Extrae lo importante

Comparte este artículo:

Josu Barrios

Josu Barrios

Somos especialistas en mantenimiento WordPress para empresas, profesionales y tiendas online. Contamos con experiencia en seguridad web, optimización de rendimiento, actualizaciones, copias de seguridad y resolución de incidencias técnicas, ayudando a que cada sitio funcione de forma rápida, estable y protegida. Nuestro enfoque combina soporte técnico profesional, buenas prácticas de seguridad y seguimiento continuo para ofrecer un servicio fiable, transparente y orientado a resultados reales.