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
- Obtener lista: Usar
/auth/webauthn/credentials(endpoint documentation) para listar credenciales - Seleccionar credencial: El usuario elige qué credencial eliminar
- Confirmar eliminación: Mostrar diálogo de confirmación
- Eliminar: Llamar a este endpoint con el ID de la credencial
- 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
/auth/webauthn/credentials(endpoint documentation) - Listar todas las credenciales del usuario/auth/webauthn/registration/options- Registrar nueva credencial/auth/webauthn/registration/verify- Verificar registro de credencial
💡 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.