Reemplazar las asignaciones de atributos de una conexión
PUT /v1/connections/{connection_id}/attribute-mappings · permiso connections:write
Reemplaza la lista completa de asignaciones de atributos de una conexión empresarial. El orden de las reglas no importa; la respuesta está ordenada por destino. If-Match es obligatorio: sin él, la solicitud falla con 428; si la lista cambió desde su última lectura (o el valor no coincide), la solicitud falla con 412 y no se escribe nada. Enviar la misma lista no escribe nada. El cambio se aplica desde el siguiente inicio de sesión y no invalida la última prueba de conexión superada. La escritura se audita como connection.attribute_mappings_replaced (destinos añadidos, eliminados y cambiados); los valores de atributos de los inicios de sesión nunca se escriben en el registro de auditoría.
Solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
connection_id |
ruta | sí | ID de la conexión empresarial (conn_…). |
If-Match |
cabecera | sí | El ETag de la última lectura. Si falta: 428; si está desactualizado: 412. |
attribute_mappings |
array | sí | La lista nueva completa, con 28 reglas como máximo. |
attribute_mappings[].target |
string | sí | email (obligatorio en cualquier lista), given_name, family_name, name, locale, zoneinfo, phone, groups o user_metadata.<key> (clave [a-z0-9_]{1,40}; no se permiten los nombres de reclamaciones OIDC registrados ni el prefijo idp_; 20 claves como máximo). Una regla por destino. Una asignación no puede escribir app_metadata. |
attribute_mappings[].source_name |
string | sí | De 1 a 512 bytes, sin caracteres de control ni bidireccionales, sin espacios al inicio ni al final. |
attribute_mappings[].source_name_format |
string | null | no | NameFormat de SAML (URI absoluta). Un mismo nombre de origen solo puede leerse con un formato. |
attribute_mappings[].overwrite |
string | sí | always, if_empty o never. |
attribute_mappings[].profile |
string | no | Nombre del perfil predefinido; generic si se omite. |
Respuesta
200 OK con la lista guardada (véase Obtener las asignaciones de atributos) y el nuevo ETag.
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 404 | not_found |
La conexión no existe en este entorno o no es una conexión empresarial. |
| 409 | conflict |
El protocolo de la conexión no tiene asignaciones de atributos (LDAP). |
| 412 | precondition_failed |
If-Match no coincide con la versión actual, o la lista cambió concurrentemente. |
| 422 | validation_failed |
Una regla incumple las reglas anteriores. Cada regla incumplida es un elemento de errors[] que apunta a /attribute_mappings/<index>/<field>, o a /attribute_mappings para reglas de lista (email_required, too_many_metadata_keys). |
| 428 | precondition_required |
Falta la cabecera If-Match. |
| 400 | unknown_field |
El cuerpo contiene un campo desconocido. |
| 401 | unauthenticated |
La credencial falta, no es válida o fue revocada. |
| 403 | insufficient_permissions |
La credencial no tiene el permiso requerido. |
| 429 | rate_limited |
Se superó el límite de tasa; reintente después del tiempo indicado en Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente; reintente después del tiempo indicado en Retry-After. |
Ejemplo
curl -X PUT "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/attribute-mappings" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-H 'If-Match: "6f1c…"' \
-d '{"attribute_mappings":[{"target":"email","source_name":"email","overwrite":"always"},{"target":"user_metadata.department","source_name":"department","overwrite":"if_empty"}]}'
keenauth connections attribute-mappings put conn_01j9xp6q0r1s5t7v9w1x3y5z7b --data @mappings.json --if-match '"6f1c…"'