Servicio decrypt_credential — Descifrado de credenciales
Resumen
Endpoint y servicio de descifrado de credenciales almacenadas. Devuelve en claro los secretos SSH/SNMP/HTTP guardados en StoredCredential, para auto-relleno en formularios de Auto-Provision y Signage.
Endpoint: GET /api/credentials/{credential_id}/decrypt
Módulo: core.credential_api (endpoint routing + guard), core.security.credential_manager.CredentialManager.decrypt_credential() (lógica de descifrado)
Requisitos de seguridad (s104)
A partir de la Auditoría Suprema (s104), el endpoint exige permiso network/edit (operador o admin), ya que devuelve secretos en claro. Un usuario readonly no puede extraer credenciales.
Historial:
- Pre-s104: Aceptaba cualquier usuario autenticado (fail-open).
- s104 (2026-06-02): Guard reforzado a
has_permission(request.user, "network", "edit").
Flujo
- Usuario (operador+) autenticado en
request.user. - Verificar
has_permission(user, "network", "edit")→ 403 si falla. - Obtener
StoredCredentialpor ID y organización del usuario. - Invocar
CredentialManager.decrypt_credential(ciphertext)→ devuelve dict con{ssh_username, ssh_password, snmp_community, http_username, http_password}. - Response 200 + JSON con los campos descifrados.
Casos de uso
- Auto-Provision: rellenar credenciales SSH cuando se provision un rack.
- Signage: rellenar HTTP basic auth en player antes de descargar manifest/video.
Tests
tests/api/test_credentials.py::test_decrypt_as_readonly_rejected— 403 para usuario readonly.tests/api/test_credentials.py::test_decrypt_as_operator_allowed— 200 para operador; datos descifrados presentes.
Véase también
- [[entity—core—service—has-permission]]
- [[entity—core—model—stored-credential]]
- [[feature—security—s104-auditoria-suprema-fixes-core]]
- [[concept—saas—multi-tenancy]]
- [[concept—security—fail-open]]