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"]}}'