Saltar al contenido principal

Eliminar credencial WebAuthn

Permite eliminar una credencial WebAuthn/FIDO2 específica del usuario autenticado. Útil para gestionar múltiples credenciales o remover dispositivos comprometidos o perdidos.


🔐 Requiere autenticación JWT

Debes enviar un token JWT válido en el header:

Authorization: Bearer <accessToken>

DELETE/auth/webauthn/credential/:id

Elimina una credencial WebAuthn específica del usuario autenticado

📋 Parámetros

idstringrequerido

ID único de la credencial WebAuthn a eliminar

📤 Respuesta

{
"success": true,
"message": "Credential deleted successfully",
"deletedCredential": {
  "id": "credential-uuid-123",
  "name": "YubiKey de Juan",
  "deletedAt": "2025-01-20T14:45:00.000Z"
}
}

Contexto de Uso

Este endpoint permite eliminar una credencial registrada para el usuario autenticado, típicamente cuando:

  • se perdió un dispositivo (llave USB/NFC, notebook, etc.)
  • se sospecha que un autenticador fue comprometido
  • se quiere limpiar credenciales antiguas
  • se administran múltiples métodos y se desea mantener solo los activos

Parámetros de URL

Ejemplo:

DELETE /auth/webauthn/credential/credential-uuid-123

Tipos de Respuesta

Respuesta Exitosa

Credencial eliminada (200)

{
"success": true,
"message": "Credential deleted successfully",
"deletedCredential": {
"id": "credential-uuid-123",
"name": "YubiKey de Juan",
"deletedAt": "2025-01-20T14:45:00.000Z"
}
}

Errores

Credencial no encontrada (404)

{
"success": false,
"error": "Credential not found",
"message": "The specified credential does not exist or does not belong to this user"
}

ID inválido (400)

{
"success": false,
"error": "Invalid credential ID format"
}

No autorizado (401)

{
"statusCode": 401,
"message": "Unauthorized"
}

Último método de autenticación (403)

El sistema previene eliminar el último método de autenticación disponible.

{
"success": false,
"error": "Cannot delete last authentication method",
"message": "You must have at least one authentication method available"
}

Ejemplo de Implementación (Frontend)

// Eliminar credencial específica
const credentialId = 'credential-uuid-123';

try {
const response = await fetch(`/auth/webauthn/credential/${credentialId}`, {
method: 'DELETE',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
}
});

const result = await response.json();

if (result.success) {
console.log('Credencial eliminada:', result.deletedCredential.name);
// Actualizar lista de credenciales en la UI
updateCredentialsList();
} else {
console.error('Error al eliminar credencial:', result.error);
}
} catch (error) {
console.error('Error de red:', error);
}

Flujo de Eliminación

  1. Obtener lista: usar /auth/webauthn/credentials (ver documentación)
  2. Seleccionar credencial: el usuario elige cuál eliminar
  3. Confirmar eliminación: mostrar diálogo de confirmación
  4. Eliminar: llamar a este endpoint con el ID
  5. Actualizar UI: remover la credencial eliminada de la lista

Consideraciones de Seguridad

Protecciones recomendadas

  • Confirmación requerida: pedir confirmación antes de eliminar
  • Último método: bloquear eliminación si deja al usuario sin métodos de acceso
  • Audit logs: registrar todas las eliminaciones

Casos de uso comunes

  • Dispositivo perdido: eliminar credenciales de dispositivos extraviados
  • Dispositivo comprometido: remover autenticadores comprometidos
  • Cambio de dispositivo: limpiar credenciales antiguas
  • Higiene de cuenta: mantener solo credenciales activas y confiables

Notas Importantes

Notas

  • Irreversible: una vez eliminada, la credencial no puede restaurarse
  • Re-registro necesario: para usar el mismo dispositivo, debe registrarse de nuevo
  • Sesiones activas: no se invalidan inmediatamente (según política)
  • Efecto inmediato: los cambios se aplican en el sistema al momento

Endpoints Relacionados


Mejores Prácticas

UI/UX (confirmación)

async function deleteCredential(credentialId, credentialName) {
const confirmed = await showConfirmDialog(
'Eliminar Credencial',
`¿Estás seguro de que quieres eliminar "${credentialName}"?`,
'Esta acción no se puede deshacer.'
);

if (confirmed) {
await deleteCredentialRequest(credentialId);
}
}

Gestión de estado (post-eliminación)

function handleCredentialDeleted(deletedCredential) {
setCredentials(prev =>
prev.filter(cred => cred.id !== deletedCredential.id)
);

showNotification(
`Credencial "${deletedCredential.name}" eliminada correctamente`,
'success'
);
}

Importante

Siempre verifica que el usuario tenga métodos alternativos de autenticación antes de permitir la eliminación de credenciales WebAuthn.