Install
This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.
Install straight from GitHub with WP-CLI:
wp plugin install https://github.com/im-fran/productoscasaalba-headless-authentication/archive/refs/heads/dev.zipCasa Alba - Headless Authentication Plugin
Plugin de WordPress para autenticación JWT completa en aplicaciones headless.
Características
🔐 Autenticación JWT
- Autenticación mediante correo electrónico (no usuario) y contraseña
- Generación de tokens JWT con algoritmo seleccionable (HS256, HS384, HS512)
- Validación de tokens JWT
- Refresco de tokens expirados/inválidos
- Revocación de tokens (cierre de sesión)
- Middleware de autenticación automática: Autentica usuarios automáticamente en cualquier endpoint de WordPress REST API usando el header
Authorization: Bearer <token>
🤖 Cloudflare Turnstile
- Integración opcional con Cloudflare Turnstile
- Validación anti-bot en el proceso de login
- Configurable desde el panel de administración
⚡ Rate Limiting
- Limitación de intentos de login fallidos
- Configurable: número de intentos, ventana de tiempo y duración de bloqueo
- Protección por IP y email
🖥️ Gestión de Sesiones
- Administración de múltiples sesiones por usuario
- Tracking detallado:
- Tipo de dispositivo (móvil, tablet, escritorio)
- Navegador y sistema operativo
- Dirección IP
- Última actividad
- Límite configurable de sesiones por usuario
- Revocación individual o masiva de sesiones
📊 Analítica y Monitoreo
- Dashboard completo de estadísticas
- Métricas en tiempo real:
- Usuarios conectados
- Tokens activos
- Inicios de sesión exitosos/fallidos
- Tasa de éxito
- Historial de actividad
- Top usuarios más activos
- Registro de intentos fallidos
Instalación
- Copia la carpeta
headless-authenticationa/wp-content/plugins/ - Activa el plugin desde el panel de WordPress
- Ve a Headless Auth > Configuración para configurar el plugin
Configuración
JWT
- Algoritmo: Selecciona el algoritmo de firma (HS256, HS384, HS512)
- Clave Secreta: Genera una clave secreta fuerte (se genera automáticamente)
- Expiración del Token: Duración del token de acceso (por defecto: 1 hora)
- Expiración del Refresh Token: Duración del refresh token (por defecto: 7 días)
Cloudflare Turnstile
- Obtén tus claves en Cloudflare Dashboard
- Activa la opción en la configuración
- Ingresa tu Site Key y Secret Key
Rate Limiting
- Máximo de Intentos: Número de intentos fallidos permitidos
- Ventana de Tiempo: Período en el que se cuentan los intentos
- Duración del Bloqueo: Tiempo que durará el bloqueo
Sesiones
- Límite de Sesiones: Número máximo de sesiones simultáneas por usuario (0 = ilimitado)
API Endpoints
Autenticación
Login
POST /wp-json/casa-alba/v1/auth/login
Body:
{
"email": "usuario@ejemplo.com",
"password": "contraseña",
"turnstile_token": "token_opcional_si_está_habilitado"
}
Response:
{
"success": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"email": "usuario@ejemplo.com",
"display_name": "Usuario",
"roles": ["customer"]
}
}
Logout
POST /wp-json/casa-alba/v1/auth/logout
Authorization: Bearer {token}
Refresh Token
POST /wp-json/casa-alba/v1/auth/refresh
Body:
{
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Validate Token
POST /wp-json/casa-alba/v1/auth/validate
Body:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Get Current User
GET /wp-json/casa-alba/v1/auth/me
Authorization: Bearer {token}
Gestión de Sesiones
Get User Sessions
GET /wp-json/casa-alba/v1/auth/sessions
Authorization: Bearer {token}
Revoke Specific Session
DELETE /wp-json/casa-alba/v1/auth/sessions/{id}
Authorization: Bearer {token}
Revoke All Sessions
DELETE /wp-json/casa-alba/v1/auth/sessions/all
Authorization: Bearer {token}
Query Params:
keep_current=true- Mantiene la sesión actual activa
Configuración
Get Turnstile Config
GET /wp-json/casa-alba/v1/auth/turnstile-key
Middleware de Autenticación JWT
El plugin incluye un middleware que permite autenticar usuarios automáticamente en cualquier endpoint de WordPress REST API usando el token JWT en el header Authorization: Bearer <token>.
Funcionamiento
Una vez que el usuario inicia sesión y obtiene un token JWT, puede usar ese token para autenticarse en cualquier endpoint de WordPress, no solo los endpoints personalizados del plugin.
Ejemplo: Acceder a endpoints nativos de WordPress
// Obtener publicaciones (endpoint nativo de WordPress)
const { data } = await axios.get(
'https://tudominio.com/wp-json/wp/v2/posts',
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
// Obtener información del usuario actual (endpoint nativo de WordPress)
const { data } = await axios.get(
'https://tudominio.com/wp-json/wp/v2/users/me',
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
// Crear un post (requiere autenticación)
const { data } = await axios.post(
'https://tudominio.com/wp-json/wp/v2/posts',
{
title: 'Mi nuevo post',
content: 'Contenido del post',
status: 'publish'
},
{
headers: {
'Authorization': `Bearer ${token}`
}
}
);
Ventajas del Middleware
- Autenticación unificada: Un solo token para todos los endpoints
- Compatibilidad total: Funciona con cualquier plugin que use la REST API de WordPress
- Seguimiento de actividad: Las peticiones autenticadas actualizan automáticamente la actividad de la sesión
- Sin configuración adicional: Funciona automáticamente al activar el plugin
Uso en el Frontend
Ejemplo con Axios (React/Vue)
import axios from 'axios';
// Configurar axios con interceptor para tokens
const api = axios.create({
baseURL: 'https://tudominio.com/wp-json/casa-alba/v1'
});
// Interceptor para añadir token
api.interceptors.request.use(config => {
const token = localStorage.getItem('access_token');
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
// Interceptor para refrescar token expirado
api.interceptors.response.use(
response => response,
async error => {
if (error.response?.status === 401) {
const refreshToken = localStorage.getItem('refresh_token');
if (refreshToken) {
try {
const { data } = await axios.post(
'https://tudominio.com/wp-json/casa-alba/v1/auth/refresh',
{ refresh_token: refreshToken }
);
localStorage.setItem('access_token', data.token);
localStorage.setItem('refresh_token', data.refresh_token);
// Reintentar request original
error.config.headers.Authorization = `Bearer ${data.token}`;
return axios(error.config);
} catch (refreshError) {
// Refresh falló, redirigir a login
localStorage.clear();
window.location.href = '/login';
}
}
}
return Promise.reject(error);
}
);
// Login
export const login = async (email, password, turnstileToken = null) => {
const { data } = await api.post('/auth/login', {
email,
password,
turnstile_token: turnstileToken
});
localStorage.setItem('access_token', data.token);
localStorage.setItem('refresh_token', data.refresh_token);
return data.user;
};
// Logout
export const logout = async () => {
await api.post('/auth/logout');
localStorage.clear();
};
// Get current user
export const getCurrentUser = async () => {
const { data } = await api.get('/auth/me');
return data;
};
Seguridad
Recomendaciones
-
Clave Secreta JWT:
- Usa una clave fuerte (mínimo 64 caracteres)
- Nunca la compartas ni la expongas en el código frontend
- Cámbiala periódicamente (invalidará todas las sesiones)
-
HTTPS:
- Siempre usa HTTPS en producción
- Los tokens viajan en headers y son vulnerables sin encriptación
-
Rate Limiting:
- Mantén activado el rate limiting
- Ajusta los límites según tus necesidades
-
Turnstile:
- Actívalo para proteger contra bots
- Es especialmente importante en sitios públicos
-
Sesiones:
- Limita el número de sesiones por usuario
- Revisa periódicamente las sesiones activas
Mantenimiento
Limpieza Automática
El plugin limpia automáticamente:
- Sesiones expiradas
- Registros de rate limiting antiguos (>24 horas)
- Analítica antigua (>90 días)
Monitoreo
Revisa regularmente:
- Panel de Analítica para detectar patrones sospechosos
- Sesiones Activas para verificar sesiones legítimas
- Intentos de login fallidos
Requisitos
- WordPress 5.8 o superior
- PHP 7.4 o superior
- MySQL 5.7 o superior
Soporte
Para reportar problemas o sugerencias, contacta a través de:
- Email: soporte@productoscasaalba.cl
- Web: https://productoscasaalba.cl
Licencia
GPL v3
Changelog
1.0.0 (2026-01-04)
- Lanzamiento inicial
- Autenticación JWT completa
- Integración con Cloudflare Turnstile
- Rate limiting
- Gestión de sesiones
- Analítica y monitoreo
Desarrollado por Casa Alba