Problemas conocidos y soluciones con el cumplimiento de protocolo SCIM 2.0 del servicio de aprovisionamiento de usuarios de Azure AD

Azure Active Directory (Azure AD) puede aprovisionar automáticamente a usuarios y grupos de cualquier aplicación o sistema dirigidos por un servicio web con la interfaz definida en la especificación del protocolo System for Cross-Domain Identity Management (SCIM) 2.0.

El soporte técnico de Azure AD para el protocolo SCIM 2.0 se describe en Uso de System for Cross-Domain Identity Management (SCIM) para aprovisionar automáticamente a los usuarios y grupos de Azure Active Directory para aplicaciones, que muestra las partes específicas del protocolo que se implementan con el fin de aprovisionar automáticamente usuarios y grupos de Azure AD a las aplicaciones que admiten SCIM 2.0.

En este artículo se describen los problemas actuales y pasados con el cumplimiento del protocolo SCIM 2.0 en el servicio de aprovisionamiento de usuarios de Azure AD, así como la forma de solucionar estos problemas.

Descripción del trabajo de aprovisionamiento

El servicio de aprovisionamiento usa el concepto de trabajo para operar con una aplicación. El valor de jobID (identificador de trabajo) se puede encontrar en la barra de progreso. Todas las nuevas aplicaciones en aprovisionamiento se crean con un jobID que empieza por "scim". El trabajo de SCIM representa el estado actual del servicio. Los trabajos más antiguos tienen el identificador "customappsso". Este trabajo representa el estado del servicio en 2018.

Si usa una aplicación de la galería, el trabajo contiene generalmente el nombre de la aplicación (por ejemplo, Zoom snowFlake, Databricks, etc.). Puede omitir esta documentación cuando se usa una aplicación de la galería. Este artículo se aplica principalmente a las aplicaciones que no son de la galería con el valor de jobID establecido en SCIM o customAppSSO.

Problemas de cumplimiento y estado de SCIM 2.0

En la tabla siguiente, cualquier elemento marcado como Corregido significa que se puede esperar el comportamiento adecuado del trabajo de SCIM. Hemos realizado trabajos para garantizar la compatibilidad con versiones anteriores de los cambios que hemos realizado. Se recomienda usar el nuevo comportamiento para todas las nuevas implementaciones y actualizar las implementaciones existentes. Tenga en cuenta que el comportamiento de customappSSO, que era el predeterminado antes de diciembre de 2018, ya no se admite.

Nota

En el caso de los cambios realizados en 2018, es posible revertir al comportamiento de customappsso. En el caso de los cambios realizados desde 2018, puede usar las direcciones URL para revertir al comportamiento anterior. Hemos realizado trabajos para garantizar la compatibilidad con versiones anteriores de los cambios que hemos realizado, permitiéndole revertir al valor de jobID anterior o mediante el uso de una marca. Sin embargo, como se mencionó anteriormente, no se recomienda implementar el comportamiento anterior, ya que ya no se admite. Se recomienda usar el nuevo comportamiento para todas las nuevas implementaciones y actualizar las implementaciones existentes.

Problema de compatibilidad de SCIM 2.0 ¿Corregido? Fecha de corrección Compatibilidad con versiones anteriores
Azure AD requiere "/scim" en la raíz de la dirección URL del punto de conexión SCIM de la aplicación. 18 de diciembre de 2018 cambiar a una versión anterior: customappSSO
Los atributos de extensión utilizan la notación de punto "." antes de los nombres de atributo en lugar de la notación de dos puntos ":". 18 de diciembre de 2018 cambiar a una versión anterior: customappSSO
Las solicitudes de revisión para los atributos multivalor tienen una sintaxis de filtro de ruta no válida. 18 de diciembre de 2018 cambiar a una versión anterior: customappSSO
Las solicitudes de creación de grupos contienen un URI de esquema no válido. 18 de diciembre de 2018 cambiar a una versión anterior: customappSSO
Actualización del comportamiento de las revisiones para garantizar el cumplimiento (por ejemplo, activo como booleano y eliminación de las pertenencia a grupos adecuadas) No TBD uso de marca de características

Marcas para modificar el comportamiento de SCIM

Utilice las marcas siguientes en la dirección URL del inquilino de la aplicación para cambiar el comportamiento predeterminado del cliente de SCIM.

SCIM flags to later behavior.

Use la siguiente dirección URL para actualizar el comportamiento de las revisiones para garantizar el cumplimiento de SCIM. La marca modificará los comportamientos siguientes:

  • Solicitudes realizadas para deshabilitar usuarios
  • Solicitudes para agregar un atributo de cadena de un solo valor
  • Solicitudes para reemplazar varios atributos
  • Solicitudes para quitar un miembro del grupo

Actualmente, este comportamiento solo está disponible cuando se usa la marca, pero se convertirá en el comportamiento predeterminado durante los próximos meses. Tenga en cuenta que esta marca de característica no funciona actualmente con el aprovisionamiento a petición.

A continuación se muestran solicitudes de ejemplo para ayudar a describir lo que el motor de sincronización envía actualmente frente a las solicitudes que se envían una vez habilitada la marca de característica.

Solicitudes realizadas para deshabilitar usuarios:

Sin marca de característica

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
      {
          "op": "Replace",
          "path": "active",
          "value": "False"
      }
  ]
}

Con marca de características

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
      {
          "op": "replace",
          "path": "active",
          "value": false
      }
  ]
}

Solicitudes realizadas para agregar un atributo de cadena de un solo valor:

Sin marca de característica

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
  {
      "op": "Add",
      "path": "nickName",
      "value": "Babs"
   }
 ]
}

Con marca de características

{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [
  {
    "op": "add",
    "path": "nickName",
    "value": "Babs"
  }
]
}

Solicitudes para reemplazar varios atributos:

Sin marca de característica

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
      {
          "op": "Replace",
          "path": "displayName",
          "value": "Pvlo"
      },
      {
          "op": "Replace",
          "path": "emails[type eq \"work\"].value",
          "value": "TestBcwqnm@test.microsoft.com"
      },
      {
          "op": "Replace",
          "path": "name.givenName",
          "value": "Gtfd"
      },
      {
          "op": "Replace",
          "path": "name.familyName",
          "value": "Pkqf"
      },
      {
          "op": "Replace",
          "path": "externalId",
          "value": "Eqpj"
      },
      {
          "op": "Replace",
          "path": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber",
          "value": "Eqpj"
      }
  ]
}

Con marca de características

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
      {
          "op": "replace",
          "path": "emails[type eq \"work\"].value",
          "value": "TestMhvaes@test.microsoft.com"
      },
      {
          "op": "replace",
          "value": {
              "displayName": "Bjfe",
              "name.givenName": "Kkom",
              "name.familyName": "Unua",
              "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber": "Aklq"
          }
      }
  ]
} 

Solicitudes realizadas para quitar un miembro del grupo:

Sin marca de característica

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
      {
          "op": "Remove",
          "path": "members",
          "value": [
              {
                  "value": "u1091"
              }
          ]
      }
  ]
} 

Con marca de características

{
  "schemas": [
      "urn:ietf:params:scim:api:messages:2.0:PatchOp"
  ],
  "Operations": [
      {
          "op": "remove",
          "path": "members[value eq \"7f4bc1a3-285e-48ae-8202-5accb43efb0e\"]"
      }
  ]
}
  • Cambio a una versión anterior de la dirección URL: una vez que el nuevo comportamiento conforme a SCIM se convierte en el valor predeterminado de una aplicación que no es de la galería, puede usar la siguiente dirección URL para revertir al comportamiento anterior, que no es compatible con SCIM: AzureAdScimPatch2017

Actualización desde el trabajo customappsso anterior al trabajo de SCIM

En los pasos siguientes se eliminará el trabajo customappsso existente y se creará un nuevo trabajo de SCIM.

  1. Inicie sesión en Azure Portal en https://portal.azure.com.

  2. En la sección Azure Active Directory > Aplicaciones empresariales de Azure Portal, busque y seleccione la aplicación SCIM existente.

  3. En la sección Propiedades de la aplicación SCIM existente, copie el id. de objeto.

  4. En una nueva ventana del explorador web, vaya a https://developer.microsoft.com/graph/graph-explorer e inicie sesión como administrador para el inquilino de Azure AD donde se agrega la aplicación.

  5. En el Probador de Graph, ejecute el comando siguiente para buscar el identificador del trabajo de aprovisionamiento. Reemplace "[object-id]" por el id. de la entidad de servicio (id. de objeto) que se copió en el tercer paso.

    GET https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs

    Get Jobs

  6. En los resultados, copie la cadena "ID" completa que comienza con "customappsso" o "scim".

  7. Ejecute el comando siguiente para recuperar la configuración de asignación de atributos, de modo que pueda realizar una copia de seguridad. Utilice el mismo [object-id] que antes y reemplace [job-id] con el identificador del trabajo de aprovisionamiento copiado en el paso anterior.

    GET https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs/[job-id]/schema

    Get Schema

  8. Copie la salida JSON desde el último paso y guárdela en un archivo de texto. El código JSON contiene las asignaciones de atributos personalizadas que ha agregado a la aplicación anterior y deben ser aproximadamente unas miles de líneas de código JSON.

  9. Ejecute el comando siguiente para eliminar el trabajo de aprovisionamiento:

    DELETE https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs/[job-id]

  10. Ejecute el comando siguiente para crear un nuevo trabajo de aprovisionamiento que tenga las correcciones del servicio más recientes.

POST https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs { "templateId": "scim" }

  1. En los resultados del último paso, copie la cadena "ID" completa que comienza con "scim". Si lo desea, vuelva a aplicar las asignaciones de atributos anteriores; para ello, ejecute el comando siguiente, reemplace [new-job-id] por el nuevo identificador de trabajo que ha copiado y escriba la salida JSON del paso 7 como cuerpo de la solicitud.

POST https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs/[new-job-id]/schema { <your-schema-json-here> }

  1. Vuelva a la primera ventana de explorador web y seleccione la pestaña Aprovisionamiento de la aplicación.
  2. Compruebe la configuración y, a continuación, inicie el trabajo de aprovisionamiento.

Está permitido retroceder al comportamiento anterior, pero no se recomienda, ya que customappsso no se beneficia de algunas de las actualizaciones que hemos realizado y es posible que no se admita siempre.

  1. Inicie sesión en Azure Portal en https://portal.azure.com.

  2. En la sección Azure Active Directory > Aplicaciones empresariales > Crear aplicación de Azure Portal, cree una nueva aplicación fuera de la galería.

  3. En la sección Propiedades de la nueva aplicación personalizada, copie el id. de objeto.

  4. En una nueva ventana del explorador web, vaya a https://developer.microsoft.com/graph/graph-explorer e inicie sesión como administrador para el inquilino de Azure AD donde se agrega la aplicación.

  5. En el Probador de Graph, ejecute el comando siguiente para inicializar la configuración de aprovisionamiento de la aplicación. Reemplace "[object-id]" por el id. de la entidad de servicio (id. de objeto) que se copió en el tercer paso.

    POST https://graph.microsoft.com/beta/servicePrincipals/[object-id]/synchronization/jobs { templateId: "customappsso" }

  6. Vuelva a la primera ventana de explorador web y seleccione la pestaña Aprovisionamiento de la aplicación.

  7. Complete la configuración del aprovisionamiento de usuarios como lo haría normalmente.

Pasos siguientes

Más información sobre aprovisionamiento y desaprovisionamiento de usuarios para aplicaciones SaaS