Previsualizar una política de organización
POST /v1/organizations/{org_id}/policies/{policy_kind}:preview · permiso organizations:write
Evalúa un objeto de configuración candidato sin guardarlo. El cuerpo es el mismo que para crear o reemplazar una política, y el servidor lo valida con las mismas reglas y el mismo control de plan, de modo que un candidato que PUT rechazaría se rechaza aquí con el mismo código de problema. No se escribe nada: ni política, ni entrada de auditoría, ni evento. La solicitud no admite If-Match ni Idempotency-Key, y la respuesta no incluye ETag.
La respuesta cuenta los usuarios a los que se aplica el candidato (basis users_in_scope), no los usuarios que serían bloqueados, con una excepción: phishing_resistant (véase más abajo). Las condiciones que solo se conocen al iniciar sesión, o que el servicio de políticas no tiene, no se filtran; not_evaluated las enumera para que el recuento nunca se interprete como mayor de lo que es.
| Tipo | Usuarios contados | not_evaluated |
|---|---|---|
authentication_methods |
Miembros activos de la organización | credentials |
mfa (required_for admins o all) |
Miembros activos de la organización | mfa_enrollment; también admin_scope para admins |
phishing_resistant (required_for admins o all) |
Miembros activos de la organización sin una credencial WebAuthn aceptada (basis users_without_webauthn, véase más abajo) |
credential_policy; también admin_scope para admins |
sso_enforcement org_context |
Miembros activos de la organización, menos bypass_user_ids |
federated_sign_in |
sso_enforcement verified_domains |
Miembros activos, más usuarios activos del entorno con una dirección de correo electrónico en un dominio verificado de esta organización, menos bypass_user_ids |
federated_sign_in |
session |
Miembros activos de la organización | ninguno |
ip_allowlist |
Miembros activos de la organización | client_ip; también admin_scope para admins |
Para phishing_resistant, el recuento y la muestra son los usuarios incluidos en el alcance que hoy no pueden iniciar sesión de forma resistente a phishing: usuarios sin una credencial WebAuthn activa (una clave de acceso, o una clave de seguridad usada como primer factor) que la lista de permitidos de AAGUID acepta. La lista de permitidos es la del candidato o, si está vacía, la del entorno; con una lista de permitidos, una credencial cuenta solo si su modelo aparece en ella y su atestación fue verificada. Las credenciales pendientes, revocadas o con sospecha de clonación no cuentan. credential_policy significa que el requisito de atestación del entorno, la regla de clave de acceso vinculada al dispositivo y el estado del modelo de autenticador no se aplican, por lo que el recuento puede ser menor que el número de usuarios que serían bloqueados. Cuando el alcance tiene más de 10.000 usuarios, la respuesta recurre a users_in_scope con passkey_enrollment. Si no se pueden leer los datos de credenciales, la solicitud falla con 503 y no se devuelve ningún recuento.
required_for none y mode off no cuentan a nadie. Un miembro activo es un miembro cuya membresía está activa y cuyo usuario no está bloqueado; cada usuario se cuenta una sola vez. admin_scope significa que admins se cuenta como todos los miembros, que es como lo aplica hoy el inicio de sesión. Los usuarios de otra organización u otro entorno nunca se cuentan.
Solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
org_id |
path | sí | ID de la organización (org_…). |
policy_kind |
path | sí | Tipo de política: authentication_methods, mfa, phishing_resistant, sso_enforcement, session o ip_allowlist. Cualquier otro valor devuelve 404. |
settings |
object | sí | El objeto de configuración candidato del tipo, con los mismos campos que para PUT. |
Cuerpo de la solicitud:
{
"settings": {
"required_for": "all",
"allowed_factors": [
"totp",
"webauthn"
],
"enrollment_grace_days": 7
}
}
Respuesta
200 OK. sample contiene como máximo 20 usuarios del conjunto contado, ordenados por ID, solo con el ID de usuario.
| Campo | Tipo | Descripción |
|---|---|---|
organization_id |
string | ID de la organización (org_…). |
policy_kind |
string | El tipo previsualizado. |
basis |
string | Lo que affected_count cuenta: users_in_scope o, para phishing_resistant, users_without_webauthn. Pueden añadirse nuevos valores. |
affected_count |
integer | Número de usuarios que basis cuenta. |
sample |
array | Como máximo 20 objetos con user_id (usr_…). |
not_evaluated |
array | Condiciones que el recuento no filtra: admin_scope, credentials, mfa_enrollment, passkey_enrollment, federated_sign_in, client_ip, credential_policy. Pueden añadirse nuevos valores. |
{
"organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
"policy_kind": "mfa",
"basis": "users_in_scope",
"affected_count": 2,
"sample": [
{
"user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4b"
},
{
"user_id": "usr_01j9xk3m7q8r2s4t6v8w0y2z4c"
}
],
"not_evaluated": [
"mfa_enrollment"
]
}
Errores
| HTTP | código | Cuándo |
|---|---|---|
| 400 | unknown_field |
El cuerpo tiene un campo que no está en el esquema. |
| 403 | plan_feature_unavailable |
El tipo o la lista de permitidos de AAGUID requiere un plan superior; el problema incluye feature y required_plan. |
| 404 | not_found |
La organización no existe o el tipo es desconocido. |
| 409 | domain_not_verified |
sso_enforcement con mode verified_domains requiere un dominio verificado en la organización. |
| 409 | connection_test_required |
Activar sso_enforcement (desde off o desde no tener política) requiere un inicio de sesión de prueba correcto de la configuración actual de al menos uno de los connection_ids en las últimas 24 horas. Ejecute una prueba de conexión (POST /v1/connections/{connection_id}:test) e inténtelo de nuevo. |
| 409 | organization_pending_deletion |
La organización está a la espera de su eliminación por autoservicio. |
| 422 | validation_failed |
Un campo de configuración es desconocido o no válido; errors[] apunta a /settings/…. |
| 422 | policy_weaker_than_parent |
La configuración es más débil que la del entorno; errors[] apunta al campo más débil. |
| 422 | at_least_one_method |
authentication_methods no deja ningún método de inicio de sesión. |
| 401 | unauthenticated |
La credencial falta, no es válida o está revocada. |
| 403 | insufficient_permissions |
La credencial no tiene el permiso requerido. |
| 429 | rate_limited |
Se superó el límite de frecuencia; reintente después del período Retry-After. |
| 503 | service_unavailable |
Una dependencia no está disponible temporalmente (en phishing_resistant, también cuando no se pueden leer los datos de credenciales); reintente después del período Retry-After. |
Ejemplo
curl -X POST https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/policies/mfa:preview \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"settings":{"required_for":"all","allowed_factors":["totp","webauthn"]}}'
keenauth organizations policies preview org_01j9xk3m7q8r2s4t6v8w0y2z4a mfa \
--data '{"settings":{"required_for":"all","allowed_factors":["totp","webauthn"]}}'