Control API - usuarios y aplicaciones de autenticación
Utilice FoxIDs Control API para aprovisionar usuarios internos y administrar las aplicaciones de autenticación registradas por cada usuario. Esta guía se centra en las operaciones que permiten sincronizar registros entre deployments de FoxIDs.
Antes de llamar a estas operaciones, configure la autenticación y los derechos de acceso de Control API. Swagger sigue siendo la referencia exacta para todas las propiedades de usuario, filtros, reglas de validación y esquemas de response:
Base de endpoints
Los ejemplos utilizan FoxIDs Cloud:
https://control.foxids.com/api/{tenant_name}/{track_name}
Sustituya {tenant_name} por el nombre del tenant y {track_name} por el nombre técnico del entorno. Cambie el host para un deployment self-hosted. Envíe el access token de Control API en el header Authorization: Bearer {access_token}.
Las operaciones de usuarios y aplicaciones de autenticación requieren un derecho de usuario para el entorno de destino. Conceda solo la operación read, create, update o delete necesaria mediante la jerarquía de derechos de Control API.
Identificadores de usuario
Cada usuario interno debe tener al menos un identificador de inicio de sesión: correo electrónico, teléfono o nombre de usuario. Los correos y nombres de usuario se normalizan a minúsculas y se eliminan los espacios iniciales y finales.
Las operaciones individuales identifican al usuario con el query parameter email, phone o username. La response también contiene un userId generado por el servidor. Es único y persistente, incluso si cambia un identificador, y debe usarse para asociar aplicaciones de autenticación u otros recursos.
Operaciones de usuario
Las operaciones individuales se agrupan bajo tenant users en Swagger.
| Operación | Endpoint | Éxito | Finalidad |
|---|---|---|---|
| Listar | GET /!users |
200 OK |
Listar y filtrar usuarios con paginación. |
| Obtener | GET /!user?email={email} |
200 OK |
Obtener un usuario por correo, teléfono o nombre de usuario. |
| Crear | POST /!user |
201 Created |
Crear un usuario con credenciales de contraseña opcionales. |
| Actualizar | PUT /!user |
200 OK |
Sustituir propiedades editables y, opcionalmente, cambiar identificadores. |
| Eliminar | DELETE /!user?email={email} |
204 No Content |
Eliminar un usuario por correo, teléfono o nombre de usuario. |
| Crear o sustituir en masa | PUT /!users |
204 No Content |
Importar usuarios nuevos o sustituir coincidencias. |
| Eliminar en masa | DELETE /!users |
204 No Content |
Eliminar usuarios indicados en el request body. |
| Establecer contraseña | PUT /!usersetpassword |
200 OK |
Establecer, importar o quitar una contraseña sin la actual. |
| Cambiar contraseña | PUT /!userchangepassword |
200 OK |
Cambiarla proporcionando la contraseña actual y la nueva. |
| Historial de contraseñas | GET, PUT o DELETE /!userpasswordhistory |
200 OK / 204 No Content |
Leer, sustituir o eliminar el historial. |
Use phone={phone} o username={username} en lugar de email={email} cuando corresponda. Añada cada endpoint a la base de endpoints.
Listar y filtrar usuarios
GET /!users admite filterEmail, filterPhone, filterUsername, filterUserId y filterClaimValue. Cada filtro busca coincidencias parciales sin distinguir mayúsculas. Con varios filtros, se devuelve el usuario si cualquiera coincide.
La response contiene una collection data y un paginationToken opaco. Repita el mismo request con el valor devuelto como paginationToken para obtener la página siguiente. Continúe hasta que no haya token. No lo interprete ni modifique.
La response indica si hay contraseña y cuándo cambió por última vez, pero nunca devuelve la contraseña ni su hash actual.
Crear un usuario
El create-request admite estado de cuenta, identificadores verificados, claims personalizados, política de contraseña, configuración por correo o SMS y ajustes MFA por usuario. Este ejemplo crea un usuario sin contraseña y exige configurarla por correo:
POST https://control.foxids.com/api/{tenant_name}/{track_name}/!user
Authorization: Bearer {access_token}
Content-Type: application/json
{
"email": "alice@example.com",
"emailVerified": true,
"setPasswordEmail": true,
"claims": [{ "claim": "role", "values": ["employee"] }]
}
Un create-request puede incluir contraseña en texto claro, campos de hash admitidos o ninguna credencial. Nunca envíe ambos formatos. Las contraseñas en claro se validan con la política elegida; los hashes importados no. Sin credenciales, use setPasswordEmail o setPasswordSms si el usuario debe crear una contraseña al iniciar sesión.
Crear un usuario existente devuelve 409 Conflict y se aplica el límite de usuarios del plan del tenant. Una operación de usuario simultánea puede bloquear temporalmente la creación; reintente 423 Locked tras una breve espera.
Actualizar un usuario
PUT /!user es una actualización completa, no un patch. Lea el usuario actual, conserve las propiedades sin cambios, aplique los cambios y envíe toda la representación editable. La collection de claims y los flags de cuenta/MFA se sustituyen. Las contraseñas y registros de aplicaciones tienen operaciones propias.
Identifique al usuario con email, phone o username. Para cambiar un identificador, mantenga su valor actual y establezca updateEmail, updatePhone o updateUsername. Una cadena vacía lo elimina; omitir la propiedad lo conserva. Mantenga al menos un identificador de inicio de sesión.
Cambiar disableAccount de false a true revoca los refresh token grants y sesiones activas. Reactivar permite nuevos inicios de sesión, pero no restaura las sesiones revocadas.
Administrar contraseñas
Use PUT /!usersetpassword para administración o migración:
- Proporcione
passwordpara aplicar la política y actualizar el historial. - Proporcione
passwordHashAlgorithm,passwordHashypasswordHashSaltpara importar un hash admitido sin validar la política. - Omita ambos formatos para quitar la contraseña actual.
passwordLastChanged es tiempo Unix opcional en segundos. changePassword obliga a elegir una nueva contraseña en el siguiente inicio de sesión aplicable. Use PUT /!userchangepassword cuando conozca la actual; se verifica y la nueva se valida contra la política y el historial.
El endpoint de historial está destinado a migración y recuperación controladas. Su detalle contiene material de hash y PUT sustituye todo el historial. Protéjalo como los hashes importados y no registre request/response bodies.
Aprovisionamiento masivo
PUT /!users admite entre 1 y 1.000 usuarios por request. Como máximo 100 entries pueden incluir contraseñas en claro. Los requests sin ellas, incluidos hashes precalculados admitidos, pueden incluir 1.000 usuarios.
La carga masiva crea o sustituye usuarios; no combina propiedades ni puede renombrar identificadores. Trátela como una importación de sustitución. Use la actualización individual para conservar el estado y el userId persistente.
DELETE /!users admite entre 1 y 1.000 correos, teléfonos o nombres de usuario en userIdentifiers. Consulte Cargar muchos usuarios para formatos, rendimiento y seed tool.
Eliminar usuarios y revocar acceso
La eliminación individual o masiva revoca refresh token grants y sesiones activas antes de borrar la cuenta. Es permanente. Use las operaciones delete de aplicaciones de autenticación para quitar solo sus registros.
Los requests de creación, actualización, contraseña y eliminación se incluyen en el audit log de Control. Las lecturas no se escriben como audit-events.
Registros de aplicaciones de autenticación
Las operaciones de aplicaciones de autenticación se agrupan bajo tenant user authenticator apps en Swagger. Una operación de lista devuelve resúmenes seguros, mientras que la operación de detalle devuelve los datos confidenciales necesarios para una sincronización controlada.
| Operación | Endpoint | Éxito | Finalidad |
|---|---|---|---|
| Listar | GET /!userauthenticatorapps?userId={userId} |
200 OK |
Devuelve los ID de registro y las horas de creación sin secrets ni datos de hash del recovery code. |
| Obtener | GET /!userauthenticatorapp?userId={userId}&id={id} |
200 OK |
Devuelve un registro con su TOTP secret y los datos de hash del recovery code. |
| Crear | POST /!userauthenticatorapp |
201 Created |
Crea un registro con un ID único proporcionado por el cliente. |
| Actualizar | PUT /!userauthenticatorapp |
200 OK |
Sustituye el secret y los datos de hash del recovery code para el ID de usuario y de registro seleccionados. |
| Eliminar | DELETE /!userauthenticatorapp?userId={userId}&id={id} |
204 No Content |
Elimina un registro. |
| Eliminar todos | DELETE /!userauthenticatorapps?userId={userId} |
204 No Content |
Elimina todos los registros de aplicaciones de autenticación del usuario. |
Añada cada endpoint a la base de endpoints. Por ejemplo:
GET https://control.foxids.com/api/{tenant_name}/{track_name}/!userauthenticatorapps?userId=e061ed17-7b44-48a8-b224-ecdb800ed5cc
Authorization: Bearer {access_token}
Recurso de registro
La creación y la actualización utilizan el recurso de registro completo:
{
"userId": "e061ed17-7b44-48a8-b224-ecdb800ed5cc",
"id": "7a772286-76a2-4f17-a0f8-4e927bb1772d",
"createTime": 1785769200,
"secret": "TOTP-SHARED-SECRET",
"recoveryCode": {
"hashAlgorithm": "P2HS512:10",
"hash": "RECOVERY-CODE-HASH",
"hashSalt": "RECOVERY-CODE-SALT"
}
}
Las propiedades se comportan del siguiente modo:
userIdes el ID estable del usuario de FoxIDs.ides un ID de registro persistente proporcionado por el cliente al crear. Selecciona el registro al actualizar y no puede cambiarse.createTimese expresa en segundos Unix. Es opcional al crear y de forma predeterminada usa la hora actual. Si se omite al actualizar, se conserva el valor existente.secretes el TOTP secret compartido y es obligatorio al crear y actualizar.recoveryCodecontiene los datos de hash del recovery code y se omite cuando no hay un recovery code configurado.
Un usuario puede tener como máximo cinco registros de aplicaciones de autenticación. Crear con un ID existente devuelve 409 Conflict; crear después de alcanzar el límite devuelve 400 Bad Request.
Sincronizar registros
Un servicio de sincronización puede combinar la Authenticator App notification API interactiva con estas operaciones de Control API:
- Reciba la notification
registeredque contieneuser_idyregistration_id. - Obtenga el registro del source deployment mediante la operación de detalle.
- Cree el registro en el target deployment o actualícelo si ya existe el mismo ID.
Las operaciones de Control API para crear, actualizar y eliminar no llaman a la Authenticator App notification API. Por tanto, la sincronización no genera un bucle de notification.
Seguridad
Las operaciones de detalle, creación y actualización exponen o aceptan un secret de aplicación de autenticación y datos de hash del recovery code. Conceda el derecho de usuario necesario solo a clientes de confianza, utilice TLS, proteja los payloads almacenados y no registre los request o response bodies.
Utilice la operación de lista cuando solo necesite los ID de registro y las horas de creación. No devuelve el secret ni los datos de hash del recovery code.
Propiedad de compatibilidad
La propiedad activeTwoFactorApp de la API general de usuario está deprecated y se prevé eliminarla después del 1 de agosto de 2027. En una update-request, false sigue eliminando todos los registros por compatibilidad; true o un valor omitido los deja sin cambios. Las integraciones nuevas deben usar los endpoints de aplicaciones de autenticación.
Responses de error
Los responses de error habituales de usuarios y aplicaciones de autenticación son:
400 Bad Requestsi los identificadores, credenciales, filtros o datos son inválidos, o se alcanzó el límite de registros.401 Unauthorizedsi falta el access token o no es válido.403 Forbiddensi el cliente no tiene el derecho de usuario necesario para el entorno.404 Not Foundsi el usuario o registro de aplicación no existe.409 Conflictsi el usuario ya existe o se reutiliza un ID de registro.423 Lockedsi la creación o importación masiva está bloqueada temporalmente. Reintente tras una breve espera.
Utilice el response body para ver los detalles de validación. Consulte Swagger UI para los responses declarados por cada operación.