Skip to main content

Eliminar credencial WebAuthn

Endpoint: DELETE /auth/webauthn/credential/:id


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>

📝 Parámetros de la URL

  • id: ID único de la credencial WebAuthn a eliminar

Ejemplo de URL:

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

📋 Respuestas

✅ 200 OK

  • Credencial eliminada correctamente

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

❌ 404 Not Found

  • Credencial no encontrada

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

❌ 400 Bad Request

  • ID de credencial inválido

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

❌ 401 Unauthorized

  • Sin token válido

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

❌ 403 Forbidden

  • Último método de autenticación

    {
    "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 (endpoint documentation) para listar credenciales
  2. Seleccionar credencial: El usuario elige qué credencial eliminar
  3. Confirmar eliminación: Mostrar diálogo de confirmación
  4. Eliminar: Llamar a este endpoint con el ID de la credencial
  5. Actualizar UI: Remover la credencial de la lista mostrada

🛡️ Consideraciones de seguridad

Protección contra eliminación accidental

  • Confirmación requerida: Siempre solicitar confirmación al usuario
  • Último método: El sistema previene eliminar la última credencial si no hay otros métodos de autenticación
  • Audit logs: Todas las eliminaciones se registran para auditoría

Casos de uso comunes

  • Dispositivo perdido: Eliminar credenciales de dispositivos extraviados
  • Dispositivo comprometido: Remover credenciales de seguridad comprometidas
  • Cambio de dispositivo: Limpiar credenciales de dispositivos antiguos
  • Gestión de credenciales: Mantener solo credenciales activas y confiables

📝 Notas importantes

  • Irreversible: Una vez eliminada, la credencial no puede ser restaurada
  • Re-registro necesario: Para usar el mismo dispositivo, será necesario registrarlo nuevamente
  • Sesiones activas: Las sesiones existentes no se ven afectadas inmediatamente
  • Sincronización: Los cambios se aplican inmediatamente en todo el sistema

⚠️ Advertencias

Para usuarios

  • Asegúrate de tener otros métodos de autenticación configurados antes de eliminar credenciales
  • Ten en cuenta que necesitarás re-registrar el dispositivo si quieres usarlo nuevamente

Para desarrolladores

  • Implementa confirmaciones claras en la UI
  • Maneja apropiadamente el caso de "última credencial"
  • Proporciona información clara sobre las consecuencias de eliminar una credencial

🔗 Endpoints relacionados


💡 Mejores prácticas

UI/UX

// Ejemplo de confirmación antes de eliminar
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

// Actualizar estado después de eliminación exitosa
function handleCredentialDeleted(deletedCredential) {
// Remover de la lista local
setCredentials(prev =>
prev.filter(cred => cred.id !== deletedCredential.id)
);

// Mostrar notificación de éxito
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.