Uso de System for Cross-Domain Identity Management (SCIM) para aprovisionar automáticamente a los usuarios y grupos de Azure Active Directory para aplicacionesUsing System for Cross-Domain Identity Management (SCIM) to automatically provision users and groups from Azure Active Directory to applications

SCIM es un protocolo y esquema estandarizado que tiene como objetivo conseguir una mayor coherencia en la forma en la que se administran las identidades entre los sistemas.SCIM is standardized protocol and schema that aims to drive greater consistency in how identities are managed across systems. Cuando una aplicación es compatible con un punto de conexión SCIM para la administración de usuarios, el servicio de aprovisionamiento de usuario de Azure AD puede enviar solicitudes para crear, modificar o eliminar usuarios y grupos asignados a este punto de conexión.When an application supports a SCIM endpoint for user management, the Azure AD user provisioning service can send requests to create, modify, or delete assigned users and groups to this endpoint.

Muchas de las aplicaciones para las que Azure AD admite aprovisionamiento automático de usuarios preintegrado, implementan SCIM como la forma de recibir notificaciones de cambio del usuario.Many of the applications for which Azure AD supports pre-integrated automatic user provisioning implement SCIM as the means to receive user change notifications. Además, los clientes pueden conectar las aplicaciones que admiten un perfil específico de la especificación del protocolo SCIM 2.0 con la opción de integración genérica "fuera de la galería" en Azure Portal.In addition to these, customers can connect applications that support a specific profile of the SCIM 2.0 protocol specification using the generic "non-gallery" integration option in the Azure portal.

El enfoque principal de este artículo se encuentra en el perfil de SCIM 2.0 que Azure AD implementa como parte de su conector genérico de SCIM para las aplicaciones fuera de la galería.The main focus of this article is on the profile of SCIM 2.0 that Azure AD implements as part of its generic SCIM connector for non-gallery apps. De todas formas, la correcta realización de pruebas de una aplicación que admite SCIM con el conector genérico de Azure AD, es un paso para que una aplicación se muestre en la galería de Azure AD como que admite el aprovisionamiento de usuarios.However, successful testing of an application that supports SCIM with the generic Azure AD connector is a step to getting an app listed in the Azure AD gallery as supporting user provisioning. Para más información sobre cómo hacer que la aplicación aparezca en la galería de aplicaciones de Azure AD, consulte Procedimientos: Registro de una aplicación en la galería de aplicaciones de Azure AD.For more information on getting your application listed in the Azure AD application gallery, see How to: List your application in the Azure AD application gallery.

Importante

El comportamiento de la implementación de SCIM de Azure AD se actualizó por última vez el 18 de diciembre de 2018.The behavior of the Azure AD SCIM implementation was last updated on December 18, 2018. Para obtener información sobre los cambios que se han producido, consulte SCIM 2.0 protocol compliance of the Azure AD User Provisioning service (Cumplimiento del protocolo SCIM 2.0 del servicio de aprovisionamiento de usuarios de Azure AD).For information on what changed, see SCIM 2.0 protocol compliance of the Azure AD User Provisioning service.

Muestra el aprovisionamiento desde Azure AD a una aplicación o un almacén de identidadesShows provisioning from Azure AD to an app or identity store
Figura 1: Aprovisionamiento desde Azure Active Directory a un aplicación o almacén de identidades que implementa SCIMFigure 1: Provisioning from Azure Active Directory to an application or identity store that implements SCIM

Este artículo se divide en cuatro secciones:This article is split into four sections:

Aprovisionamiento de usuarios y grupos para aplicaciones que admiten SCIMProvisioning users and groups to applications that support SCIM

Azure AD se puede configurar para que aprovisione automáticamente usuarios y grupos asignados a aplicaciones que implementan un perfil específico del protocolo SCIM 2.0.Azure AD can be configured to automatically provision assigned users and groups to applications that implement a specific profile of the SCIM 2.0 protocol. Los detalles del perfil están documentados en Información sobre la implementación de SCIM de Azure AD.The specifics of the profile are documented in Understanding the Azure AD SCIM implementation.

Consulte a su proveedor de la aplicación o la documentación que se incluye con la aplicación para ver si existen declaraciones de compatibilidad con estos requisitos.Check with your application provider, or your application provider's documentation for statements of compatibility with these requirements.

Importante

La implementación de SCIM de Azure AD se basa en el servicio de aprovisionamiento de usuarios de Azure AD, que está diseñado para mantener a los usuarios constantemente sincronizados entre Azure AD y la aplicación de destino, y que implementa un conjunto muy específico de operaciones estándar.The Azure AD SCIM implementation is built on top of the Azure AD user provisioning service, which is designed to constantly keep users in sync between Azure AD and the target application, and implements a very specific set of standard operations. Es importante comprender estos comportamientos para entender el comportamiento del cliente de SCIM de Azure AD.It's important to understand these behaviors to understand the behavior of the Azure AD SCIM client. Para más información, consulte ¿Qué ocurre durante el aprovisionamiento de usuarios?For more information, see What happens during user provisioning?.

IntroducciónGetting started

Las aplicaciones que admiten el perfil SCIM descrito en este artículo se pueden conectar a Azure Active Directory mediante la característica "de aplicación situada fuera de la galería" de la galería de aplicaciones de Azure AD.Applications that support the SCIM profile described in this article can be connected to Azure Active Directory using the "non-gallery application" feature in the Azure AD application gallery. Una vez conectadas, Azure AD ejecuta un proceso de sincronización cada 40 minutos en el que consulta el punto de conexión SCIM de la aplicación para ver los usuarios y grupos asignados, y los crea o modifica según los detalles de asignación.Once connected, Azure AD runs a synchronization process every 40 minutes where it queries the application's SCIM endpoint for assigned users and groups, and creates or modifies them according to the assignment details.

Para conectar una aplicación que admite SCIM:To connect an application that supports SCIM:

  1. Inicie sesión en el portal de Azure Active Directory.Sign in to the Azure Active Directory portal.

  2. En el panel izquierdo, seleccione Aplicaciones empresariales.Select Enterprise applications from the left pane. Se muestra una lista de las aplicaciones configuradas, incluidas aquellas que se han agregado desde la galería.A list of all configured apps is shown, including apps that were added from the gallery.

  3. Seleccione + Nueva aplicación > Todas > Aplicación situada fuera de la galería.Select + New application > All > Non-gallery application.

  4. Escriba un nombre para la aplicación y seleccione Agregar para crear un objeto de aplicación.Enter a name for your application, and select Add to create an app object. La nueva aplicación se agrega a la lista de aplicaciones empresariales y se abre en su pantalla de administración de la aplicación.The new app is added to the list of enterprise applications and opens to its app management screen.

    Captura de pantalla que muestra la galería de aplicaciones de Azure ADScreenshot shows the Azure AD application gallery
    Figura 2: Galería de aplicaciones de Azure ADFigure 2: Azure AD application gallery

  5. En la pantalla de administración de la aplicación, seleccione Aprovisionamiento en el panel izquierdo.In the app management screen, select Provisioning in the left panel.

  6. En el menú Modo de aprovisionamiento, seleccione Automático.In the Provisioning Mode menu, select Automatic.

    Ejemplo: Página Aprovisionamiento de una aplicación en Azure PortalExample: An app's Provisioning page in the Azure portal
    Figura 3: Configuración del aprovisionamiento en Azure PortalFigure 3: Configuring provisioning in the Azure portal

  7. En el campo Dirección URL del inquilino, escriba la dirección URL del punto de conexión SCIM de la aplicación.In the Tenant URL field, enter the URL of the application's SCIM endpoint. Ejemplo: https://api.contoso.com/scim/Example: https://api.contoso.com/scim/

  8. Si el punto de conexión SCIM requiere un token de portador OAuth de un emisor que no sea Azure AD, copie el token de portador OAuth necesario en el campo Token secreto.If the SCIM endpoint requires an OAuth bearer token from an issuer other than Azure AD, then copy the required OAuth bearer token into the optional Secret Token field. Si este campo se deja en blanco, Azure AD incluye un token de portador OAuth emitido desde Azure AD con cada solicitud.If this field is left blank, Azure AD includes an OAuth bearer token issued from Azure AD with each request. Las aplicaciones que usan Azure AD como un proveedor de identidades pueden validar este token que emitió Azure AD.Apps that use Azure AD as an identity provider can validate this Azure AD-issued token.

  9. Seleccione Probar conexión para que Azure Active Directory intente conectarse al punto de conexión SCIM.Select Test Connection to have Azure Active Directory attempt to connect to the SCIM endpoint. Si se produce un error en el intento, se muestra la información de error.If the attempt fails, error information is displayed.

    Nota

    La prueba de conexión consulta el punto de conexión SCIM de un usuario que no existe mediante un GUID aleatorio, como la propiedad de coincidencia seleccionada en la configuración de Azure AD.Test Connection queries the SCIM endpoint for a user that doesn't exist, using a random GUID as the matching property selected in the Azure AD configuration. La respuesta correcta esperada es HTTP 200 OK con un mensaje ListResponse de SCIM vacío.The expected correct response is HTTP 200 OK with an empty SCIM ListResponse message.

  10. Si la conexión se realiza con éxito, a continuación, seleccione Guardar para guardar las credenciales de administrador.If the attempts to connect to the application succeed, then select Save to save the admin credentials.

  11. En la sección Asignaciones, hay dos conjuntos seleccionables de asignaciones de atributos: uno para los objetos de usuario y otro para los objetos de grupo.In the Mappings section, there are two selectable sets of attribute mappings: one for user objects and one for group objects. Seleccione cada uno de ellos para revisar los atributos que se sincronizan desde Azure Active Directory a la aplicación.Select each one to review the attributes that are synchronized from Azure Active Directory to your app. Los atributos seleccionados como propiedades de Coincidencia se usan para buscar coincidencias con los usuarios y grupos de la aplicación con el objetivo de realizar operaciones de actualización.The attributes selected as Matching properties are used to match the users and groups in your app for update operations. Para confirmar los cambios, seleccione Guardar.Select Save to commit any changes.

    Nota

    Opcionalmente, puede deshabilitar la sincronización de objetos de grupo deshabilitando la asignación de "grupos".You can optionally disable syncing of group objects by disabling the "groups" mapping.

  12. En Settings (Configuración), el campo Scope (Ámbito) define qué usuarios y grupos se sincronizan.Under Settings, the Scope field defines which users and groups are synchronized. Seleccione Sincronizar solo los usuarios y grupos asignados (recomendado) para que se sincronicen solamente los usuarios y los grupos asignados en la pestaña Usuarios y grupos.Select Sync only assigned users and groups (recommended) to only sync users and groups assigned in the Users and groups tab.

  13. Una vez completada la configuración, cambie el Estado de aprovisionamiento a Activado.Once your configuration is complete, set the Provisioning Status to On.

  14. Seleccione Guardar para iniciar el servicio de aprovisionamiento de Azure AD.Select Save to start the Azure AD provisioning service.

  15. Al sincronizar solo los usuarios y grupos asignados (recomendado), no olvide seleccionar la pestaña Usuarios y grupos y asignar los usuarios o grupos que quiere sincronizar.If syncing only assigned users and groups (recommended), be sure to select the Users and groups tab and assign the users or groups you want to sync.

Una vez que haya iniciado la sincronización inicial, puede seleccionar Registros de auditoría en el panel izquierdo para supervisar el progreso, con esto se muestran todas las acciones realizadas por el servicio de aprovisionamiento en la aplicación.Once the initial synchronization has started, you can select Audit logs in the left panel to monitor progress, which shows all actions done by the provisioning service on your app. Para más información sobre cómo leer los registros de aprovisionamiento de Azure AD, consulte el tutorial de Creación de informes sobre el aprovisionamiento automático de cuentas de usuario.For more information on how to read the Azure AD provisioning logs, see Reporting on automatic user account provisioning.

Nota

La sincronización inicial tarda más tiempo en realizarse que las posteriores, que se producen aproximadamente cada 40 minutos si se está ejecutando el servicio.The initial sync takes longer to perform than later syncs, which occur approximately every 40 minutes as long as the service is running.

Información sobre la implementación de SCIM de Azure ADUnderstanding the Azure AD SCIM implementation

Si está creando una aplicación que admite una API de administración de usuario de SCIM 2.0, esta sección describe en detalle cómo se implementa el cliente de SCIM de Azure AD, y cómo debe modelar el control y las respuestas de la solicitud de protocolo SCIM.If you're building an application that supports a SCIM 2.0 user management API, this section describes in detail how the Azure AD SCIM client is implemented, and how you should model your SCIM protocol request handling and responses. Una vez que haya implementado el punto de conexión SCIM, puede probarlo con el procedimiento descrito en la sección anterior.Once you've implemented your SCIM endpoint, you can test it by following the procedure described in the previous section.

Dentro de la especificación del protocolo SCIM 2.0, la aplicación tiene que cumplir estos requisitos:Within the SCIM 2.0 protocol specification, your application must meet these requirements:

  • Admitir la creación de usuarios y de forma opcional también de grupos, según la sección 3.3 del protocolo SCIM.Supports creating users, and optionally also groups, as per section 3.3 of the SCIM protocol.
  • Admitir la modificación de usuarios o grupos con solicitudes PATCH, según la sección 3.5.2 del protocolo SCIM.Supports modifying users or groups with PATCH requests, as per section 3.5.2 of the SCIM protocol.
  • Admitir la recuperación de un recurso conocido, para un usuario o un grupo creado anteriormente, según la sección 3.4.1 del protocolo SCIM.Supports retrieving a known resource for a user or group created earlier, as per section 3.4.1 of the SCIM protocol.
  • Admitir la consulta de usuarios o grupos, según la sección 3.4.2 del protocolo SCIM.Supports querying users or groups, as per section 3.4.2 of the SCIM protocol. De forma predeterminada, los usuarios se recuperan por sus id y se consultan por sus username y externalid, y los grupos por su displayName.By default, users are retrieved by their id and queried by their username and externalid, and groups are queried by displayName.
  • Admitir la consulta de usuarios por identificador y por administrador, según la sección 3.4.2 del protocolo SCIM.Supports querying user by ID and by manager, as per section 3.4.2 of the SCIM protocol.
  • Admitir la consulta de grupos por Id. y miembro, según la sección 3.4.2 del protocolo SCIM.Supports querying groups by ID and by member, as per section 3.4.2 of the SCIM protocol.
  • Acepta un token de portador único para la autenticación y autorización de Azure AD para la aplicación.Accepts a single bearer token for authentication and authorization of Azure AD to your application.

Siga estas directrices generales al implementar un punto de conexión SCIM para garantizar la compatibilidad con Azure AD:Follow these general guidelines when implementing a SCIM endpoint to ensure compatibility with Azure AD:

  • id es una propiedad obligatoria para todos los recursos.id is a required property for all the resources. Todas las respuestas que devuelve un recurso deben asegurarse de que cada recurso tiene esta propiedad, excepto ListResponse con cero miembros.Every response that returns a resource should ensure each resource has this property, except for ListResponse with zero members.
  • La respuesta a una solicitud de consulta o filtrado siempre debe ser una ListResponse.Response to a query/filter request should always be a ListResponse.
  • Los grupos son opcionales, pero solo se admiten si la implementación de SCIM admite las solicitudes PATCH.Groups are optional, but only supported if the SCIM implementation supports PATCH requests.
  • No es necesario incluir todo el recurso completo en la respuesta PATCH.It isn't necessary to include the entire resource in the PATCH response.
  • Microsoft Azure AD solo usa los siguientes operadores:Microsoft Azure AD only uses the following operators:
    • eq
    • and
  • No solicite una coincidencia entre mayúsculas y minúsculas en los elementos estructurales de SCIM, en particular en los valores de operación PATCH op, como se define en https://tools.ietf.org/html/rfc7644#section-3.5.2.Don't require a case-sensitive match on structural elements in SCIM, in particular PATCH op operation values, as defined in https://tools.ietf.org/html/rfc7644#section-3.5.2. Azure AD emite los valores de "op" como Add, Replace, y Remove.Azure AD emits the values of 'op' as Add, Replace, and Remove.
  • Microsoft Azure AD realiza solicitudes para recuperar un usuario y un grupo aleatorio para asegurarse de que el punto de conexión y las credenciales son válidas.Microsoft Azure AD makes requests to fetch a random user and group to ensure that the endpoint and the credentials are valid. También se realiza como parte del flujo de la Prueba de conexión en Azure Portal.It's also done as a part of Test Connection flow in the Azure portal.
  • El atributo sobre el que se pueden consultar los recursos debe establecerse como un atributo coincidente en la aplicación en Azure Portal.The attribute that the resources can be queried on should be set as a matching attribute on the application in the Azure portal. Para más información, consulte Personalización de asignaciones de atributos de aprovisionamiento de usuariosFor more information, see Customizing User Provisioning Attribute Mappings

Aprovisionamiento y cancelación del aprovisionamiento de usuariosUser provisioning and de-provisioning

La siguiente ilustración muestra los mensajes que Azure Active Directory envía a un servicio SCIM para administrar el ciclo de vida de un usuario en su almacén de identidades.The following illustration shows the messages that Azure Active Directory sends to a SCIM service to manage the lifecycle of a user in your application's identity store.

Muestra la secuencia de aprovisionamiento y desaprovisionamiento de usuariosShows the user provisioning and de-provisioning sequence
Ilustración 4: Secuencia de aprovisionamiento y cancelación de aprovisionamiento de usuariosFigure 4: User provisioning and de-provisioning sequence

Aprovisionamiento y cancelación del aprovisionamiento de gruposGroup provisioning and de-provisioning

El aprovisionamiento y desaprovisionamiento de grupos es opcional.Group provisioning and de-provisioning are optional. Cuando se implementa y habilita, la siguiente ilustración muestra los mensajes que Azure AD envía a un servicio SCIM para administrar el ciclo de vida de un usuario en el almacén de identidades de la aplicación.When implemented and enabled, the following illustration shows the messages that Azure AD sends to a SCIM service to manage the lifecycle of a group in your application's identity store. Esos mensajes se diferencian de los mensajes sobre los usuarios de dos maneras:Those messages differ from the messages about users in two ways:

  • Las solicitudes para recuperar grupos especifican que el atributo members se excluya de cualquier recurso proporcionado en respuesta a la solicitud.Requests to retrieve groups specify that the members attribute is to be excluded from any resource provided in response to the request.
  • Las solicitudes para determinar si un atributo de referencia tiene un valor determinado son solicitudes sobre el atributo members.Requests to determine whether a reference attribute has a certain value are requests about the members attribute.

Muestra la secuencia de aprovisionamiento y desaprovisionamiento de gruposShows the group provisioning and de-provisioning sequence
Ilustración 5: Secuencia de aprovisionamiento y cancelación del aprovisionamiento de gruposFigure 5: Group provisioning and de-provisioning sequence

Modificación de solicitudes y respuestas de protocolo SCIMSCIM protocol requests and responses

Esta sección proporciona solicitudes SCIM de ejemplo emitidas por el cliente de SCIM de Azure AD y el ejemplo respuestas esperadas.This section provides example SCIM requests emitted by the Azure AD SCIM client and example expected responses. Para obtener mejores resultados, debe codificar la aplicación para controlar estas solicitudes en este formato y emitir las respuestas esperadas.For best results, you should code your app to handle these requests in this format and emit the expected responses.

Importante

Para comprender cómo y cuándo el servicio de aprovisionamiento de usuario de Azure AD emite las operaciones que se describen a continuación, consulte ¿Qué ocurre durante el aprovisionamiento de usuarios?.To understand how and when the Azure AD user provisioning service emits the operations described below, see What happens during user provisioning?.

Operaciones de usuarioUser Operations

  • Los usuarios pueden ser consultados por atributos userName o email[type eq "work"].Users can be queried by userName or email[type eq "work"] attributes.

Crear usuarioCreate User

SolicitudRequest

POST /UsersPOST /Users

{
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"],
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "active": true,
    "emails": [{
        "primary": true,
        "type": "work",
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com"
    }],
    "meta": {
        "resourceType": "User"
    },
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName"
    },
    "roles": []
}
ResponseResponse

HTTP/1.1 201 CreatedHTTP/1.1 201 Created

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "48af03ac28ad4fb88478",
    "externalId": "0a21f0f2-8d2a-4f8e-bf98-7363c4aed4ef",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_ab6490ee-1e48-479e-a20b-2d77186b5dd1",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_fd0ea19b-0777-472c-9f96-4f70d2226f2e@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Obtener usuarioGet User

SolicitudRequest

GET /Users/5d48a0a8e9f04aa38008GET /Users/5d48a0a8e9f04aa38008

RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5d48a0a8e9f04aa38008",
    "externalId": "58342554-38d6-4ec8-948c-50044d0a33fd",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_feed3ace-693c-4e5a-82e2-694be1b39934",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_22370c1a-9012-42b2-bf64-86099c2a1c22@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Obtener usuario por consultaGet User by query

SolicitudRequest

GET /Users?filter=userName eq "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081"GET /Users?filter=userName eq "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081"

RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
        "id": "2441309d85324e7793ae",
        "externalId": "7fce0092-d52e-4f76-b727-3955bd72c939",
        "meta": {
            "resourceType": "User",
            "created": "2018-03-27T19:59:26.000Z",
            "lastModified": "2018-03-27T19:59:26.000Z"
            
        },
        "userName": "Test_User_dfeef4c5-5681-4387-b016-bdf221e82081",
        "name": {
            "familyName": "familyName",
            "givenName": "givenName"
        },
        "active": true,
        "emails": [{
            "value": "Test_User_91b67701-697b-46de-b864-bd0bbe4f99c1@testuser.com",
            "type": "work",
            "primary": true
        }]
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Obtener usuario por consulta: cero resultadosGet User by query - Zero results

SolicitudRequest

GET /Users?filter=userName eq "non-existent user"GET /Users?filter=userName eq "non-existent user"

RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 0,
    "Resources": [],
    "startIndex": 1,
    "itemsPerPage": 20
}

Actualizar usuario [propiedades con varios valores]Update User [Multi-valued properties]

SolicitudRequest

PATCH /Users/6764549bef60420686bc HTTP/1.1PATCH /Users/6764549bef60420686bc HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
            {
            "op": "Replace",
            "path": "emails[type eq \"work\"].value",
            "value": "updatedEmail@microsoft.com"
            },
            {
            "op": "Replace",
            "path": "name.familyName",
            "value": "updatedFamilyName"
            }
    ]
}
RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "6764549bef60420686bc",
    "externalId": "6c75de36-30fa-4d2d-a196-6bdcdb6b6539",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "userName": "Test_User_fbb9dda4-fcde-4f98-a68b-6c5599e17c27",
    "name": {
        "formatted": "givenName updatedFamilyName",
        "familyName": "updatedFamilyName",
        "givenName": "givenName"
    },
    "active": true,
    "emails": [{
        "value": "updatedEmail@microsoft.com",
        "type": "work",
        "primary": true
    }]
}

Actualizar usuario [propiedades de un solo valor]Update User [Single-valued properties]

SolicitudRequest

PATCH /Users/5171a35d82074e068ce2 HTTP/1.1PATCH /Users/5171a35d82074e068ce2 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "userName",
        "value": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com"
    }]
}
RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "id": "5171a35d82074e068ce2",
    "externalId": "aa1eca08-7179-4eeb-a0be-a519f7e5cd1a",
    "meta": {
        "resourceType": "User",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "userName": "5b50642d-79fc-4410-9e90-4c077cdd1a59@testuser.com",
    "name": {
        "formatted": "givenName familyName",
        "familyName": "familyName",
        "givenName": "givenName",
    },
    "active": true,
    "emails": [{
        "value": "Test_User_49dc1090-aada-4657-8434-4995c25a00f7@testuser.com",
        "type": "work",
        "primary": true
    }]
}

Eliminar usuarioDelete User

SolicitudRequest

DELETE /Users/5171a35d82074e068ce2 HTTP/1.1DELETE /Users/5171a35d82074e068ce2 HTTP/1.1

RespuestaResponse

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

Operaciones de grupoGroup Operations

  • Los grupos deben crearse siempre con una lista de miembros vacía.Groups shall always be created with an empty members list.
  • Los grupos pueden ser consultados por el atributo displayName.Groups can be queried by the displayName attribute.
  • La actualización de la solicitud de PATCH del grupo debe producir un HTTP 204 No Content en la respuesta.Update to the group PATCH request should yield an HTTP 204 No Content in the response. La devolución de un cuerpo con una lista de todos los miembros no es aconsejable.Returning a body with a list of all the members isn't advisable.
  • No es necesario admitir la devolución de todos los miembros del grupo.It isn't necessary to support returning all the members of the group.

Crear grupoCreate Group

SolicitudRequest

POST /Groups HTTP/1.1POST /Groups HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group", "http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/2.0/Group"],
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "displayName": "displayName",
    "members": [],
    "meta": {
        "resourceType": "Group"
    }
}
RespuestaResponse

HTTP/1.1 201 CreatedHTTP/1.1 201 Created

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "927fa2c08dcb4a7fae9e",
    "externalId": "8aa1a0c0-c4c3-4bc0-b4a5-2ef676900159",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
        
    },
    "displayName": "displayName",
    "members": []
}

Obtener grupoGet Group

SolicitudRequest

GET /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1GET /Groups/40734ae655284ad3abcc?excludedAttributes=members HTTP/1.1

RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
    "id": "40734ae655284ad3abcc",
    "externalId": "60f1bb27-2e1e-402d-bcc4-ec999564a194",
    "meta": {
        "resourceType": "Group",
        "created": "2018-03-27T19:59:26.000Z",
        "lastModified": "2018-03-27T19:59:26.000Z"
    },
    "displayName": "displayName",
}

Obtener grupo por displayNameGet Group by displayName

SolicitudRequest

GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1GET /Groups?excludedAttributes=members&filter=displayName eq "displayName" HTTP/1.1

RespuestaResponse

HTTP/1.1 200 OKHTTP/1.1 200 OK

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
    "totalResults": 1,
    "Resources": [{
        "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
        "id": "8c601452cc934a9ebef9",
        "externalId": "0db508eb-91e2-46e4-809c-30dcbda0c685",
        "meta": {
            "resourceType": "Group",
            "created": "2018-03-27T22:02:32.000Z",
            "lastModified": "2018-03-27T22:02:32.000Z",
            
        },
        "displayName": "displayName",
    }],
    "startIndex": 1,
    "itemsPerPage": 20
}

Actualizar grupo [atributos no de miembro]Update Group [Non-member attributes]

SolicitudRequest

PATCH /Groups/fa2ce26709934589afc5 HTTP/1.1PATCH /Groups/fa2ce26709934589afc5 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Replace",
        "path": "displayName",
        "value": "1879db59-3bdf-4490-ad68-ab880a269474updatedDisplayName"
    }]
}
RespuestaResponse

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

Actualizar grupo [Agregar miembros]Update Group [Add Members]

SolicitudRequest

PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Add",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
RespuestaResponse

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

Actualizar grupo [Eliminar miembros]Update Group [Remove Members]

SolicitudRequest

PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1PATCH /Groups/a99962b9f99d4c4fac67 HTTP/1.1

{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [{
        "op": "Remove",
        "path": "members",
        "value": [{
            "$ref": null,
            "value": "f648f8d5ea4e4cd38e9c"
        }]
    }]
}
RespuestaResponse

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

Eliminar grupoDelete Group

SolicitudRequest

DELETE /Groups/cdb1ce18f65944079d37 HTTP/1.1DELETE /Groups/cdb1ce18f65944079d37 HTTP/1.1

RespuestaResponse

HTTP/1.1 204 No ContentHTTP/1.1 204 No Content

Creación de punto de conexión SCIM con las bibliotecas CLI de MicrosoftBuilding a SCIM endpoint using Microsoft CLI libraries

Al crear un servicio web SCIM que interactúa con Azure Active Directory, puede habilitar el aprovisionamiento automático de usuarios para prácticamente cualquier aplicación o almacén de identidades.By creating a SCIM web service that interfaces with Azure Active Directory, you can enable automatic user provisioning for virtually any application or identity store.

Aquí le mostramos cómo funciona:Here’s how it works:

  1. Azure AD proporciona una biblioteca de infraestructura de lenguaje común (CLI) llamada Microsoft.SystemForCrossDomainIdentityManagement, incluida con los ejemplos de código descritos a continuación.Azure AD provides a common language infrastructure (CLI) library named Microsoft.SystemForCrossDomainIdentityManagement, included with the code samples describe below. Los desarrolladores y los integradores de sistemas pueden usar esta biblioteca para crear e implementar un punto de conexión de servicio web basado en SCIM que pueda conectar Azure AD a cualquier almacén de identidades de aplicación.System integrators and developers can use this library to create and deploy a SCIM-based web service endpoint that can connect Azure AD to any application’s identity store.
  2. Las asignaciones se implementan en el servicio web para asignar el esquema de usuario estándar al esquema de usuario y el protocolo requerido por la aplicación.Mappings are implemented in the web service to map the standardized user schema to the user schema and protocol required by the application.
  3. La dirección URL del punto de conexión está registrada en Azure AD como parte de una aplicación personalizada en la galería de aplicaciones.The endpoint URL is registered in Azure AD as part of a custom application in the application gallery.
  4. Se asignan usuarios y grupos a esta aplicación en Azure AD.Users and groups are assigned to this application in Azure AD. Tras la asignación, se colocan en una cola para sincronizarse con la aplicación de destino.Upon assignment, they're put into a queue to be synchronized to the target application. El proceso de sincronización que controla la cola se ejecuta cada 40 minutos.The synchronization process handling the queue runs every 40 minutes.

Ejemplos de códigoCode samples

Para facilitar este proceso, se proporcionan ejemplos de código que crean un punto de conexión de servicio web SCIM y demuestran el aprovisionamiento automático.To make this process easier, code samples are provided, which create a SCIM web service endpoint and demonstrate automatic provisioning. El ejemplo es de un proveedor que mantiene un archivo con filas de valores separados por comas que representan a usuarios y grupos.The sample is of a provider that maintains a file with rows of comma-separated values representing users and groups.

Requisitos previosPrerequisites

IntroducciónGetting started

Es la manera más fácil de implementar un punto de conexión SCIM que puede aceptar las solicitudes de aprovisionamiento de Azure AD para compilar e implementar el ejemplo de código que genera los usuarios aprovisionados en un archivo de valores separados por comas (CSV).The easiest way to implement a SCIM endpoint that can accept provisioning requests from Azure AD is to build and deploy the code sample that outputs the provisioned users to a comma-separated value (CSV) file.

Para crear un punto de conexión SCIM de ejemploTo create a sample SCIM endpoint

  1. Descargue el paquete de ejemplo de código en https://github.com/Azure/AzureAD-BYOA-Provisioning-Samples/tree/masterDownload the code sample package at https://github.com/Azure/AzureAD-BYOA-Provisioning-Samples/tree/master

  2. Descomprima el paquete y colóquelo en un equipo con Windows, en una ubicación como C:\AzureAD-BYOA-Provisioning-Samples.Unzip the package and place it on your Windows machine at a location such as C:\AzureAD-BYOA-Provisioning-Samples.

  3. En esta carpeta, inicie el proyecto FileProvisioning\Host\FileProvisioningService.csproj en Visual Studio.In this folder, launch the FileProvisioning\Host\FileProvisioningService.csproj project in Visual Studio.

  4. Seleccione Herramientas > Administrador de paquetes NuGet > Consola del Administrador de paquetes y ejecute los siguientes comandos para que el proyecto FileProvisioningService resuelva las referencias de la solución:Select Tools > NuGet Package Manager > Package Manager Console, and execute the following commands for the FileProvisioningService project to resolve the solution references:

     Update-Package -Reinstall
    
  5. Cree el proyecto FileProvisioningService.Build the FileProvisioningService project.

  6. Inicie la aplicación Símbolo del sistema de Windows (como administrador) y use el comando cd para cambiar el directorio a la carpeta \AzureAD-BYOA-Provisioning-Samples\FileProvisioning\Host\bin\Debug.Launch the Command Prompt application in Windows (as an Administrator), and use the cd command to change the directory to your \AzureAD-BYOA-Provisioning-Samples\FileProvisioning\Host\bin\Debug folder.

  7. Ejecute el comando siguiente y reemplace <ip-address> por la dirección IP o el nombre de dominio de la máquina Windows:Run the following command, replacing <ip-address> with the IP address or domain name of the Windows machine:

     FileSvc.exe http://<ip-address>:9000 TargetFile.csv
    
  8. En Windows, en Configuración de Windows > Configuración de Internet y red, seleccione Firewall de Windows > Configuración avanzada y cree una regla de entrada que permita el acceso de entrada al puerto 9000.In Windows under Windows Settings > Network & Internet Settings, select the Windows Firewall > Advanced Settings, and create an Inbound Rule that allows inbound access to port 9000.

  9. Si la máquina Windows está detrás de un enrutador, este tiene que configurarse para ejecutar la traducción de direcciones de red entre su puerto 9000, que está expuesto a Internet, y el puerto 9000 de la máquina Windows.If the Windows machine is behind a router, the router needs to be configured to run Network Access Translation between its port 9000 that is exposed to the internet, and port 9000 on the Windows machine. Esta configuración es necesaria para que Azure AD tenga acceso a este punto de conexión en la nube.This configuration is required for Azure AD to access this endpoint in the cloud.

Para registrar el punto de conexión SCIM de ejemplo en Azure ADTo register the sample SCIM endpoint in Azure AD

  1. Inicie sesión en el portal de Azure Active Directory.Sign in to the Azure Active Directory portal.

  2. En el panel izquierdo, seleccione Aplicaciones empresariales.Select Enterprise applications from the left pane. Se muestra una lista de las aplicaciones configuradas, incluidas aquellas que se han agregado desde la galería.A list of all configured apps is shown, including apps that were added from the gallery.

  3. Seleccione + Nueva aplicación > Todas > Aplicación situada fuera de la galería.Select + New application > All > Non-gallery application.

  4. Escriba un nombre para la aplicación y seleccione Agregar para crear un objeto de aplicación.Enter a name for your application, and select Add to create an app object. El objeto de la aplicación creado está diseñado para representar la aplicación de destino a la que va a aprovisionar y para la que va a implementar el inicio de sesión único, no solo el punto de conexión SCIM.The application object created is intended to represent the target app you would be provisioning to and implementing single sign-on for, and not just the SCIM endpoint.

  5. En la pantalla de administración de la aplicación, seleccione Aprovisionamiento en el panel izquierdo.In the app management screen, select Provisioning in the left panel.

  6. En el menú Modo de aprovisionamiento, seleccione Automático.In the Provisioning Mode menu, select Automatic.

  7. En el campo Dirección URL del inquilino, escriba la dirección URL del punto de conexión SCIM de la aplicación.In the Tenant URL field, enter the URL of the application's SCIM endpoint. Ejemplo: https://api.contoso.com/scim/Example: https://api.contoso.com/scim/

  8. Si el punto de conexión SCIM requiere un token de portador OAuth de un emisor que no sea Azure AD, copie el token de portador OAuth necesario en el campo Token secreto.If the SCIM endpoint requires an OAuth bearer token from an issuer other than Azure AD, then copy the required OAuth bearer token into the optional Secret Token field. Si este campo se deja en blanco, Azure AD incluye un token de portador OAuth emitido desde Azure AD con cada solicitud.If this field is left blank, Azure AD includes an OAuth bearer token issued from Azure AD with each request. Las aplicaciones que usan Azure AD como un proveedor de identidades pueden validar este token que emitió Azure AD.Apps that use Azure AD as an identity provider can validate this Azure AD-issued token.

  9. Seleccione Probar conexión para que Azure Active Directory intente conectarse al punto de conexión SCIM.Select Test Connection to have Azure Active Directory attempt to connect to the SCIM endpoint. Si se produce un error en el intento, se muestra la información de error.If the attempt fails, error information is displayed.

    Nota

    La prueba de conexión consulta el punto de conexión SCIM de un usuario que no existe mediante un GUID aleatorio, como la propiedad de coincidencia seleccionada en la configuración de Azure AD.Test Connection queries the SCIM endpoint for a user that doesn't exist, using a random GUID as the matching property selected in the Azure AD configuration. La respuesta correcta esperada es HTTP 200 OK con un mensaje ListResponse de SCIM vacío.The expected correct response is HTTP 200 OK with an empty SCIM ListResponse message

  10. Si la conexión se realiza con éxito, a continuación, seleccione Guardar para guardar las credenciales de administrador.If the attempts to connect to the application succeed, then select Save to save the admin credentials.

  11. En la sección Asignaciones, hay dos conjuntos seleccionables de asignaciones de atributos: uno para los objetos de usuario y otro para los objetos de grupo.In the Mappings section, there are two selectable sets of attribute mappings: one for user objects and one for group objects. Seleccione cada uno de ellos para revisar los atributos que se sincronizan desde Azure Active Directory a la aplicación.Select each one to review the attributes that are synchronized from Azure Active Directory to your app. Los atributos seleccionados como propiedades de Coincidencia se usan para buscar coincidencias con los usuarios y grupos de la aplicación con el objetivo de realizar operaciones de actualización.The attributes selected as Matching properties are used to match the users and groups in your app for update operations. Para confirmar los cambios, seleccione Guardar.Select Save to commit any changes.

  12. En Configuración, el campo Ámbito define qué usuarios y grupos se sincronizan.Under Settings, the Scope field defines which users and or groups are synchronized. Seleccione Sincronizar solo los usuarios y grupos asignados (recomendado) para que se sincronicen solamente los usuarios y los grupos asignados en la pestaña Usuarios y grupos.Select "Sync only assigned users and groups (recommended) to only sync users and groups assigned in the Users and groups tab.

  13. Una vez completada la configuración, cambie el Estado de aprovisionamiento a Activado.Once your configuration is complete, set the Provisioning Status to On.

  14. Seleccione Guardar para iniciar el servicio de aprovisionamiento de Azure AD.Select Save to start the Azure AD provisioning service.

  15. Al sincronizar solo los usuarios y grupos asignados (recomendado), no olvide seleccionar la pestaña Usuarios y grupos y asignar los usuarios o grupos que quiere sincronizar.If syncing only assigned users and groups (recommended), be sure to select the Users and groups tab and assign the users or groups you want to sync.

Una vez que haya iniciado la sincronización inicial, puede seleccionar Registros de auditoría en el panel izquierdo para supervisar el progreso, con esto se muestran todas las acciones realizadas por el servicio de aprovisionamiento en la aplicación.Once the initial synchronization has started, you can select Audit logs in the left panel to monitor progress, which shows all actions done by the provisioning service on your app. Para más información sobre cómo leer los registros de aprovisionamiento de Azure AD, consulte el tutorial de Creación de informes sobre el aprovisionamiento automático de cuentas de usuario.For more information on how to read the Azure AD provisioning logs, see Reporting on automatic user account provisioning.

El último paso en la comprobación del ejemplo es abrir el archivo TargetFile.csv en la carpeta \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\bin\Debug en el equipo Windows.The final step in verifying the sample is to open the TargetFile.csv file in the \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\bin\Debug folder on your Windows machine. Una vez que se ejecuta el proceso de aprovisionamiento, este archivo muestra los detalles de todos los usuarios y grupos asignados y aprovisionados.Once the provisioning process is run, this file shows the details of all assigned and provisioned users and groups.

Bibliotecas de desarrolloDevelopment libraries

Para desarrollar su propio servicio web que cumpla la especificación SCIM, familiarícese primero con las siguientes bibliotecas proporcionadas por Microsoft para ayudar a acelerar el proceso de desarrollo:To develop your own web service that conforms to the SCIM specification, first familiarize yourself with the following libraries provided by Microsoft to help accelerate the development process:

  • Se ofrecen bibliotecas de Common Language Infrastructure (CLI) que se pueden usar con lenguajes basados en dicha infraestructura, como C#.Common Language Infrastructure (CLI) libraries are offered for use with languages based on that infrastructure, such as C#. Una de esas bibliotecas, Microsoft.SystemForCrossDomainIdentityManagement.Service, declara una interfaz Microsoft.SystemForCrossDomainIdentityManagement.IProvider, que se muestra en la ilustración a continuación.One of those libraries, Microsoft.SystemForCrossDomainIdentityManagement.Service, declares an interface, Microsoft.SystemForCrossDomainIdentityManagement.IProvider, shown in the following illustration. Un desarrollador que usa las bibliotecas debería implementar esa interfaz con una clase a la que se puede hacer referencia, de forma genérica, como un proveedor.A developer using the libraries would implement that interface with a class that may be referred to, generically, as a provider. Las bibliotecas permiten al desarrollador implementar un servicio web que se ajusta a la especificación SCIM.The libraries let the developer deploy a web service that conforms to the SCIM specification. El servicio web se puede hospedar en Internet Information Services o en cualquier ensamblado ejecutable de Common Language Infrastructure.The web service can be either hosted within Internet Information Services, or any executable CLI assembly. La solicitud se traduce en llamadas a los métodos del proveedor, que pueden ser programadas por el desarrollador para operar en un almacén de identidades.Request is translated into calls to the provider’s methods, which would be programmed by the developer to operate on some identity store.

    Desglose: Una solicitud traducida en llamadas a los métodos del proveedor

  • Los controladores de ruta Express están disponibles para analizar los objetos de solicitud de node.js que representan llamadas (tal y como se define en la especificación SCIM), realizadas a un servicio web de node.js.Express route handlers are available for parsing node.js request objects representing calls (as defined by the SCIM specification), made to a node.js web service.

Creación de un punto de conexión SCIM personalizadoBuilding a custom SCIM endpoint

Los desarrolladores que usan las bibliotecas CLI pueden hospedar sus servicios en cualquier ensamblado ejecutable de Common Language Infrastructure o en Internet Information Services.Developers using the CLI libraries can host their services within any executable CLI assembly, or within Internet Information Services. Aquí se incluye un ejemplo de código para hospedar un servicio dentro de un ensamblado ejecutable en la dirección http://localhost:9000:Here is sample code for hosting a service within an executable assembly, at the address http://localhost:9000:

 private static void Main(string[] arguments)
 {
 // Microsoft.SystemForCrossDomainIdentityManagement.IMonitor, 
 // Microsoft.SystemForCrossDomainIdentityManagement.IProvider and 
 // Microsoft.SystemForCrossDomainIdentityManagement.Service are all defined in 
 // Microsoft.SystemForCrossDomainIdentityManagement.Service.dll.  

 Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitor = 
   new DevelopersMonitor();
 Microsoft.SystemForCrossDomainIdentityManagement.IProvider provider = 
   new DevelopersProvider(arguments[1]);
 Microsoft.SystemForCrossDomainIdentityManagement.Service webService = null;
 try
 {
     webService = new WebService(monitor, provider);
     webService.Start("http://localhost:9000");

     Console.ReadKey(true);
 }
 finally
 {
     if (webService != null)
     {
         webService.Dispose();
         webService = null;
     }
 }
 }

 public class WebService : Microsoft.SystemForCrossDomainIdentityManagement.Service
 {
 private Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitor;
 private Microsoft.SystemForCrossDomainIdentityManagement.IProvider provider;

 public WebService(
   Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitoringBehavior, 
   Microsoft.SystemForCrossDomainIdentityManagement.IProvider providerBehavior)
 {
     this.monitor = monitoringBehavior;
     this.provider = providerBehavior;
 }

 public override IMonitor MonitoringBehavior
 {
     get
     {
         return this.monitor;
     }

     set
     {
         this.monitor = value;
     }
 }

 public override IProvider ProviderBehavior
 {
     get
     {
         return this.provider;
     }

     set
     {
         this.provider = value;
     }
 }
 }

Este servicio debe tener una dirección HTTP y un certificado de autenticación de servidor para el que la entidad de certificación raíz tenga uno de los siguientes nombres:This service must have an HTTP address and server authentication certificate of which the root certification authority is one of the following names:

  • CNNICCNNIC
  • ComodoComodo
  • CyberTrustCyberTrust
  • DigiCertDigiCert
  • GeoTrustGeoTrust
  • GlobalSignGlobalSign
  • Go DaddyGo Daddy
  • VeriSignVeriSign
  • WoSignWoSign

Un certificado de autenticación de servidor puede enlazarse a un puerto en un host de Windows mediante la utilidad de shell de red siguiente:A server authentication certificate can be bound to a port on a Windows host using the network shell utility:

netsh http add sslcert ipport=0.0.0.0:443 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}  

En este caso, el valor proporcionado para el argumento certhash es la huella digital del certificado, mientras que el valor proporcionado para el argumento appid es un identificador único global arbitrario.Here, the value provided for the certhash argument is the thumbprint of the certificate, while the value provided for the appid argument is an arbitrary globally unique identifier.

Para hospedar el servicio en Internet Information Services, un desarrollador debería crear un ensamblado de biblioteca de código CLI con una clase denominada Startup en el espacio de nombres predeterminado del ensamblado.To host the service within Internet Information Services, a developer would build a CLI code library assembly with a class named Startup in the default namespace of the assembly. Este es un ejemplo de este tipo de clase:Here is a sample of such a class:

 public class Startup
 {
 // Microsoft.SystemForCrossDomainIdentityManagement.IWebApplicationStarter, 
 // Microsoft.SystemForCrossDomainIdentityManagement.IMonitor and  
 // Microsoft.SystemForCrossDomainIdentityManagement.Service are all defined in 
 // Microsoft.SystemForCrossDomainIdentityManagement.Service.dll.  

 Microsoft.SystemForCrossDomainIdentityManagement.IWebApplicationStarter starter;

 public Startup()
 {
     Microsoft.SystemForCrossDomainIdentityManagement.IMonitor monitor = 
       new DevelopersMonitor();
     Microsoft.SystemForCrossDomainIdentityManagement.IProvider provider = 
       new DevelopersProvider();
     this.starter = 
       new Microsoft.SystemForCrossDomainIdentityManagement.WebApplicationStarter(
         provider, 
         monitor);
 }

 public void Configuration(
   Owin.IAppBuilder builder) // Defined in Owin.dll.  
 {
     this.starter.ConfigureApplication(builder);
 }
 }

Control de la autenticación de puntos de conexiónHandling endpoint authentication

Las solicitudes de Azure Active Directory incluyen un token de portador de OAuth 2.0.Requests from Azure Active Directory include an OAuth 2.0 bearer token. Cualquier servicio que reciba la solicitud debe autenticar al emisor como Azure Active Directory para el inquilino Azure Active Directory esperado, para el acceso al servicio web Graph de Azure Active Directory.Any service receiving the request should authenticate the issuer as being Azure Active Directory for the expected Azure Active Directory tenant, for access to the Azure Active Directory Graph web service. En el token, el emisor se identifica mediante una notificación de iss; por ejemplo, "iss": "https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/".In the token, the issuer is identified by an iss claim, like "iss":"https://sts.windows.net/cbb1a5ac-f33b-45fa-9bf5-f37db0fed422/". En este ejemplo, la dirección base del valor de notificación, https://sts.windows.net, identifica a Azure Active Directory como el emisor, mientras que el segmento de la dirección relativa, cbb1a5ac f33b 45fa 9bf5 f37db0fed422, es un identificador único del inquilino de Azure Active Directory para el que se emitió el token.In this example, the base address of the claim value, https://sts.windows.net, identifies Azure Active Directory as the issuer, while the relative address segment, cbb1a5ac-f33b-45fa-9bf5-f37db0fed422, is a unique identifier of the Azure Active Directory tenant for which the token was issued. La audiencia del token será el identificador de la plantilla de aplicación de la aplicación en la galería.The audience for the token will be the application template id for the app in the gallery. El identificador de la plantilla de aplicación para todas las aplicaciones personalizadas es 8adf8e6e-67b2-4cf2-a259-e3dc5476c621.The application template id for all custom apps is 8adf8e6e-67b2-4cf2-a259-e3dc5476c621. El identificador de la plantilla de aplicación de cada aplicación de la galería varía.The application template id for each app in the gallery varies. Póngase en contacto con ProvisioningFeedback@microsoft.com para cuestiones relativas al identificador de la plantilla de aplicación de una aplicación de la galería.Please contact ProvisioningFeedback@microsoft.com for questions on the application template id for a gallery application. Cada una de las aplicaciones registradas en un solo inquilino puede recibir la misma notificación iss con las solicitudes SCIM.Each of the applications registered in a single tenant may receive the same iss claim with SCIM requests.

Los desarrolladores que usan las bibliotecas de CLI proporcionadas por Microsoft para crear un servicio SCIM pueden autenticar las solicitudes de Azure Active Directory mediante el paquete Microsoft.Owin.Security.ActiveDirectory siguiendo estos pasos:Developers using the CLI libraries provided by Microsoft for building a SCIM service can authenticate requests from Azure Active Directory using the Microsoft.Owin.Security.ActiveDirectory package by following these steps:

  1. En un proveedor, implemente la propiedad Microsoft.SystemForCrossDomainIdentityManagement.IProvider.StartupBehavior; para ello, haga que devuelva un método al que llamar cuando se inicia el servicio:In a provider, implement the Microsoft.SystemForCrossDomainIdentityManagement.IProvider.StartupBehavior property by having it return a method to be called whenever the service is started:

      public override Action<Owin.IAppBuilder, System.Web.Http.HttpConfiguration.HttpConfiguration> StartupBehavior
      {
        get
        {
          return this.OnServiceStartup;
        }
      }
    
      private void OnServiceStartup(
        Owin.IAppBuilder applicationBuilder,  // Defined in Owin.dll.  
        System.Web.Http.HttpConfiguration configuration)  // Defined in System.Web.Http.dll.  
      {
      }
    
  2. Agregue el siguiente código a dicho método para que cualquier solicitud a cualquiera de los puntos de conexión del servicio se autentique como si tuviera un token emitido por Azure Active Directory para un inquilino especificado, para acceder al servicio web Graph de Azure Active Directory:Add the following code to that method to have any request to any of the service’s endpoints authenticated as bearing a token issued by Azure Active Directory for a specified tenant, for access to the Azure AD Graph web service:

      private void OnServiceStartup(
        Owin.IAppBuilder applicationBuilder IAppBuilder applicationBuilder, 
        System.Web.Http.HttpConfiguration HttpConfiguration configuration)
      {
        // IFilter is defined in System.Web.Http.dll.  
        System.Web.Http.Filters.IFilter authorizationFilter = 
          new System.Web.Http.AuthorizeAttribute(); // Defined in System.Web.Http.dll.configuration.Filters.Add(authorizationFilter);
    
        // SystemIdentityModel.Tokens.TokenValidationParameters is defined in    
        // System.IdentityModel.Token.Jwt.dll.
        SystemIdentityModel.Tokens.TokenValidationParameters tokenValidationParameters =     
          new TokenValidationParameters()
          {
            ValidAudience = "8adf8e6e-67b2-4cf2-a259-e3dc5476c621"
          };
    
        // WindowsAzureActiveDirectoryBearerAuthenticationOptions is defined in 
        // Microsoft.Owin.Security.ActiveDirectory.dll
        Microsoft.Owin.Security.ActiveDirectory.
        WindowsAzureActiveDirectoryBearerAuthenticationOptions authenticationOptions =
          new WindowsAzureActiveDirectoryBearerAuthenticationOptions()    {
          TokenValidationParameters = tokenValidationParameters,
          Tenant = "03F9FCBC-EA7B-46C2-8466-F81917F3C15E" // Substitute the appropriate tenant’s 
                                                        // identifier for this one.  
        };
    
        applicationBuilder.UseWindowsAzureActiveDirectoryBearerAuthentication(authenticationOptions);
      }
    

Control del aprovisionamiento y desaprovisionamiento de usuariosHandling provisioning and deprovisioning of users

  1. Azure Active Directory consulta el servicio para un usuario con un valor de atributo externalId que coincida con el valor de atributo mailNickname de un usuario de Azure AD.Azure Active Directory queries the service for a user with an externalId attribute value matching the mailNickname attribute value of a user in Azure AD. La consulta se expresa como una solicitud de Protocolo de transferencia de hipertexto (HTTP) como la de este ejemplo, donde jyoung es un ejemplo de un mailNickname de un usuario en Azure Active Directory.The query is expressed as a Hypertext Transfer Protocol (HTTP) request such as this example, wherein jyoung is a sample of a mailNickname of a user in Azure Active Directory.

    Nota

    Esto es solo un ejemplo.This is an example only. No todos los usuarios tendrán un atributo mailNickname, y el valor que tiene un usuario no puede ser único en el directorio.Not all users will have a mailNickname attribute, and the value a user has may not be unique in the directory. Además, el atributo utilizado para la coincidencia (que en este caso es externalId) es configurable en las asignaciones de atributos de Azure AD.Also, the attribute used for matching (which in this case is externalId) is configurable in the Azure AD attribute mappings.

     GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
     Authorization: Bearer ...
    

    Si el servicio se creó mediante las bibliotecas de CLI proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce en una llamada al método Query del proveedor del servicio.If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. Esta es la firma de ese método:Here is the signature of that method:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in 
     // Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
     // Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters is defined in 
     // Microsoft.SystemForCrossDomainIdentityManagement.Protocol.  
    
     System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource[]> Query(
       Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters parameters, 
       string correlationIdentifier);
    

    Esta es la definición de la interfaz de Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters:Here is the definition of the Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters interface:

     public interface IQueryParameters: 
       Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
     {
         System.Collections.Generic.IReadOnlyCollection <Microsoft.SystemForCrossDomainIdentityManagement.IFilter> AlternateFilters 
         { get; }
     }
    
     public interface Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
     {
       system.Collections.Generic.IReadOnlyCollection<string> ExcludedAttributePaths 
       { get; }
       System.Collections.Generic.IReadOnlyCollection<string> RequestedAttributePaths 
       { get; }
       string SchemaIdentifier 
       { get; }
     }
    
      GET https://.../scim/Users?filter=externalId eq jyoung HTTP/1.1
      Authorization: Bearer ...
    

    Si el servicio se creó mediante las bibliotecas de Common Language Infrastructure proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce en una llamada al método Query del proveedor del servicio.If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. Esta es la firma de ese método:Here is the signature of that method:

      // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
      // Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in 
      // Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
      // Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters is defined in 
      // Microsoft.SystemForCrossDomainIdentityManagement.Protocol.  
    
      System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource[]>  Query(
        Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters parameters, 
        string correlationIdentifier);
    

    Esta es la definición de la interfaz de Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters:Here is the definition of the Microsoft.SystemForCrossDomainIdentityManagement.IQueryParameters interface:

      public interface IQueryParameters: 
        Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
      {
          System.Collections.Generic.IReadOnlyCollection  <Microsoft.SystemForCrossDomainIdentityManagement.IFilter> AlternateFilters 
          { get; }
      }
    
      public interface Microsoft.SystemForCrossDomainIdentityManagement.IRetrievalParameters
      {
        system.Collections.Generic.IReadOnlyCollection<string> ExcludedAttributePaths 
        { get; }
        System.Collections.Generic.IReadOnlyCollection<string> RequestedAttributePaths 
        { get; }
        string SchemaIdentifier 
        { get; }
      }
    
      public interface Microsoft.SystemForCrossDomainIdentityManagement.IFilter
      {
          Microsoft.SystemForCrossDomainIdentityManagement.IFilter AdditionalFilter 
            { get; set; }
          string AttributePath 
            { get; } 
          Microsoft.SystemForCrossDomainIdentityManagement.ComparisonOperator FilterOperator 
            { get; }
          string ComparisonValue 
            { get; }
      }
    
      public enum Microsoft.SystemForCrossDomainIdentityManagement.ComparisonOperator
      {
          Equals
      }
    

    En el ejemplo anterior de una consulta para un usuario con un valor especificado para el atributo externalId, los valores de los argumentos pasados al método Query serán los siguientes:In the following sample of a query for a user with a given value for the externalId attribute, values of the arguments passed to the Query method are:

    • parameters.AlternateFilters.Count: 1parameters.AlternateFilters.Count: 1
    • parameters.AlternateFilters.ElementAt(0).AttributePath: "externalId"parameters.AlternateFilters.ElementAt(0).AttributePath: "externalId"
    • parameters.AlternateFilters.ElementAt(0).ComparisonOperator: ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(0).ComparisonOperator: ComparisonOperator.Equals
    • parameters.AlternateFilter.ElementAt(0).ComparisonValue: "jyoung"parameters.AlternateFilter.ElementAt(0).ComparisonValue: "jyoung"
    • correlationIdentifier: System.Net.Http.HttpRequestMessage.GetOwinEnvironment["owin.RequestId"]correlationIdentifier: System.Net.Http.HttpRequestMessage.GetOwinEnvironment["owin.RequestId"]
  2. Si la respuesta a una consulta al servicio web relativa a un usuario con un valor de atributo externalId que coincide con el valor de atributo mailNickname de un usuario, no devuelve ningún usuario, Azure Active Directory solicita al servicio que aprovisione un usuario correspondiente al de Azure Active Directory.If the response to a query to the web service for a user with an externalId attribute value that matches the mailNickname attribute value of a user doesn't return any users, then Azure Active Directory requests that the service provision a user corresponding to the one in Azure Active Directory. Este es un ejemplo de dicha solicitud:Here is an example of such a request:

     POST https://.../scim/Users HTTP/1.1
     Authorization: Bearer ...
     Content-type: application/scim+json
     {
       "schemas":
       [
         "urn:ietf:params:scim:schemas:core:2.0:User",
         "urn:ietf:params:scim:schemas:extension:enterprise:2.0User"],
       "externalId":"jyoung",
       "userName":"jyoung",
       "active":true,
       "addresses":null,
       "displayName":"Joy Young",
       "emails": [
         {
           "type":"work",
           "value":"jyoung@Contoso.com",
           "primary":true}],
       "meta": {
         "resourceType":"User"},
        "name":{
         "familyName":"Young",
         "givenName":"Joy"},
       "phoneNumbers":null,
       "preferredLanguage":null,
       "title":null,
       "department":null,
       "manager":null}
    

    Las bibliotecas de CLI proporcionadas por Microsoft para implementar servicios SCIM traducirían esa solicitud en una llamada al método Create del proveedor del servicio.The CLI libraries provided by Microsoft for implementing SCIM services would translate that request into a call to the Create method of the service’s provider. El método Create tiene esta firma:The Create method has this signature:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.Resource is defined in 
     // Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
    
     System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource> Create(
       Microsoft.SystemForCrossDomainIdentityManagement.Resource resource, 
       string correlationIdentifier);
    

    En el caso de una solicitud de aprovisionamiento de un usuario, el valor del argumento del recurso es una instancia de Microsoft.SystemForCrossDomainIdentityManagement.In a request to provision a user, the value of the resource argument is an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Clase Core2EnterpriseUser, definida en la biblioteca Microsoft.SystemForCrossDomainIdentityManagement.Schemas.Core2EnterpriseUser class, defined in the Microsoft.SystemForCrossDomainIdentityManagement.Schemas library. Si la solicitud para aprovisionar el usuario se realiza correctamente, la implementación del método debería devolver una instancia de Microsoft.SystemForCrossDomainIdentityManagement.If the request to provision the user succeeds, then the implementation of the method is expected to return an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Clase Core2EnterpriseUser, con el valor de la propiedad Identifier establecido en el identificador único del usuario recién aprovisionado.Core2EnterpriseUser class, with the value of the Identifier property set to the unique identifier of the newly provisioned user.

  3. Para actualizar un usuario que se sabe que existe en un almacén de identidades dirigido por un SCIM, Azure Active Directory solicita el estado actual de dicho usuario desde el servicio con una solicitud como esta:To update a user known to exist in an identity store fronted by an SCIM, Azure Active Directory proceeds by requesting the current state of that user from the service with a request such as:

     GET ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
     Authorization: Bearer ...
    

    En un servicio creado mediante las bibliotecas de CLI proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce en una llamada al método Retrieve del proveedor del servicio.In a service built using the CLI libraries provided by Microsoft for implementing SCIM services, the request is translated into a call to the Retrieve method of the service’s provider. Esta es la firma del método Retrieve:Here is the signature of the Retrieve method:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.Resource and 
     // Microsoft.SystemForCrossDomainIdentityManagement.IResourceRetrievalParameters 
     // are defined in Microsoft.SystemForCrossDomainIdentityManagement.Schemas.  
     System.Threading.Tasks.Task<Microsoft.SystemForCrossDomainIdentityManagement.Resource> 
        Retrieve(
          Microsoft.SystemForCrossDomainIdentityManagement.IResourceRetrievalParameters 
            parameters, 
            string correlationIdentifier);
    
     public interface 
       Microsoft.SystemForCrossDomainIdentityManagement.IResourceRetrievalParameters:   
         IRetrievalParameters
         {
           Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier 
             ResourceIdentifier 
               { get; }
     }
     public interface Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier
     {
         string Identifier 
           { get; set; }
         string Microsoft.SystemForCrossDomainIdentityManagement.SchemaIdentifier 
           { get; set; }
     }
    

    En el ejemplo anterior de una solicitud para recuperar el estado actual de un usuario, los valores de las propiedades del objeto proporcionados como el valor del argumento parameters son los siguientes:In the example of a request to retrieve the current state of a user, the values of the properties of the object provided as the value of the parameters argument are as follows:

    • Identificador: "54D382A4-2050-4C03-94D1-E769F1D15682"Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  4. Si se va a actualizar un atributo de referencia, Azure Active Directory consulta el servicio para determinar si el valor actual del atributo de referencia en el almacén de identidades dirigido por el servicio, ya coincide con el valor de dicho atributo en Azure Active Directory.If a reference attribute is to be updated, then Azure Active Directory queries the service to determine whether the current value of the reference attribute in the identity store fronted by the service already matches the value of that attribute in Azure Active Directory. Para los usuarios, el único atributo del que se va a consultar el valor actual de esta manera es el atributo manager.For users, the only attribute of which the current value is queried in this way is the manager attribute. Este es un ejemplo de una solicitud para determinar si el atributo de administrador de un determinado objeto de usuario tiene actualmente un determinado valor:Here is an example of a request to determine whether the manager attribute of a particular user object currently has a certain value:

    Si el servicio se creó mediante las bibliotecas de CLI proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce en una llamada al método Query del proveedor del servicio.If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. El valor de las propiedades del objeto proporcionado como el valor del argumento parameters es el siguiente:The value of the properties of the object provided as the value of the parameters argument are as follows:

    • parameters.AlternateFilters.Count: 2parameters.AlternateFilters.Count: 2
    • parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"
    • parameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equals
    • parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"
    • parameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equals
    • parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"
    • parameters.RequestedAttributePaths.ElementAt(0): "ID"parameters.RequestedAttributePaths.ElementAt(0): "ID"
    • parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

    En este caso, el valor del índice x puede ser 0 y el valor del índice y puede ser 1, o bien el valor de x puede ser 1 y el valor de y puede ser 0, en función del orden de las expresiones del parámetro de consulta filter.Here, the value of the index x can be 0 and the value of the index y can be 1, or the value of x can be 1 and the value of y can be 0, depending on the order of the expressions of the filter query parameter.

  5. A continuación se proporciona un ejemplo de una solicitud de Azure Active Directory a un servicio SCIM para actualizar un usuario:Here is an example of a request from Azure Active Directory to an SCIM service to update a user:

     PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
     Authorization: Bearer ...
     Content-type: application/scim+json
     {
       "schemas": 
       [
         "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
       "Operations":
       [
         {
           "op":"Add",
           "path":"manager",
           "value":
             [
               {
                 "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
                 "value":"2819c223-7f76-453a-919d-413861904646"}]}]}
    

    Las bibliotecas de CLI para implementar servicios SCIM traducirían la solicitud en una llamada al método Update del proveedor del servicio.The Microsoft CLI libraries for implementing SCIM services would translate the request into a call to the Update method of the service’s provider. Esta es la signatura del método Update:Here is the signature of the Update method:

     // System.Threading.Tasks.Tasks and 
     // System.Collections.Generic.IReadOnlyCollection<T>
     // are defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.IPatch, 
     // Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase, 
     // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
     // Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation, 
     // Microsoft.SystemForCrossDomainIdentityManagement.OperationName, 
     // Microsoft.SystemForCrossDomainIdentityManagement.IPath and 
     // Microsoft.SystemForCrossDomainIdentityManagement.OperationValue 
     // are all defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
    
     System.Threading.Tasks.Task Update(
       Microsoft.SystemForCrossDomainIdentityManagement.IPatch patch, 
       string correlationIdentifier);
    
     public interface Microsoft.SystemForCrossDomainIdentityManagement.IPatch
     {
     Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase 
       PatchRequest 
         { get; set; }
     Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier 
       ResourceIdentifier 
         { get; set; }        
     }
    
     public class PatchRequest2: 
       Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase
     {
     public System.Collections.Generic.IReadOnlyCollection
       <Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation> 
         Operations
         { get;}
    

    Si el servicio se creó mediante las bibliotecas de Common Language Infrastructure proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce en una llamada al método Query del proveedor del servicio.If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Query method of the service’s provider. El valor de las propiedades del objeto proporcionado como el valor del argumento parameters es el siguiente:The value of the properties of the object provided as the value of the parameters argument are as follows:

  • parameters.AlternateFilters.Count: 2parameters.AlternateFilters.Count: 2

  • parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"parameters.AlternateFilters.ElementAt(x).AttributePath: "ID"

  • parameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(x).ComparisonOperator: ComparisonOperator.Equals

  • parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"parameters.AlternateFilter.ElementAt(x).ComparisonValue: "54D382A4-2050-4C03-94D1-E769F1D15682"

  • parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"parameters.AlternateFilters.ElementAt(y).AttributePath: "manager"

  • parameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equalsparameters.AlternateFilters.ElementAt(y).ComparisonOperator: ComparisonOperator.Equals

  • parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"parameters.AlternateFilter.ElementAt(y).ComparisonValue: "2819c223-7f76-453a-919d-413861904646"

  • parameters.RequestedAttributePaths.ElementAt(0): "ID"parameters.RequestedAttributePaths.ElementAt(0): "ID"

  • parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"parameters.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

    En este caso, el valor del índice x puede ser 0 y el valor del índice y puede ser 1, o bien el valor de x puede ser 1 y el valor de y puede ser 0, en función del orden de las expresiones del parámetro de consulta filter.Here, the value of the index x can be 0 and the value of the index y can be 1, or the value of x can be 1 and the value of y can be 0, depending on the order of the expressions of the filter query parameter.

  1. A continuación se proporciona un ejemplo de una solicitud de Azure Active Directory a un servicio SCIM para actualizar un usuario:Here is an example of a request from Azure Active Directory to an SCIM service to update a user:

      PATCH ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
      Authorization: Bearer ...
      Content-type: application/scim+json
      {
        "schemas": 
        [
          "urn:ietf:params:scim:api:messages:2.0:PatchOp"],
        "Operations":
        [
          {
            "op":"Add",
            "path":"manager",
            "value":
              [
                {
                  "$ref":"http://.../scim/Users/2819c223-7f76-453a-919d-413861904646",
                  "value":"2819c223-7f76-453a-919d-413861904646"}]}]}
    

    Las bibliotecas de Microsoft Common Language Infrastructure para implementar servicios SCIM traducirían la solicitud de una llamada al método Update del proveedor del servicio.The Microsoft Common Language Infrastructure libraries for implementing SCIM services would translate the request into a call to the Update method of the service’s provider. Esta es la signatura del método Update:Here is the signature of the Update method:

      // System.Threading.Tasks.Tasks and 
      // System.Collections.Generic.IReadOnlyCollection<T>
      // are defined in mscorlib.dll.  
      // Microsoft.SystemForCrossDomainIdentityManagement.IPatch, 
      // Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase, 
      // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
      // Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation, 
      // Microsoft.SystemForCrossDomainIdentityManagement.OperationName, 
      // Microsoft.SystemForCrossDomainIdentityManagement.IPath and 
      // Microsoft.SystemForCrossDomainIdentityManagement.OperationValue 
      // are all defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
    
      System.Threading.Tasks.Task Update(
        Microsoft.SystemForCrossDomainIdentityManagement.IPatch patch, 
        string correlationIdentifier);
    
      public interface Microsoft.SystemForCrossDomainIdentityManagement.IPatch
      {
      Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase 
        PatchRequest 
          { get; set; }
      Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier 
        ResourceIdentifier 
          { get; set; }        
      }
    
      public class PatchRequest2: 
        Microsoft.SystemForCrossDomainIdentityManagement.PatchRequestBase
      {
      public System.Collections.Generic.IReadOnlyCollection
        <Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation> 
          Operations
          { get;}
    
      public void AddOperation(
        Microsoft.SystemForCrossDomainIdentityManagement.PatchOperation operation);
      }
    
      public class PatchOperation
      {
      public Microsoft.SystemForCrossDomainIdentityManagement.OperationName 
        Name
        { get; set; }
    
      public Microsoft.SystemForCrossDomainIdentityManagement.IPath 
        Path
        { get; set; }
    
      public System.Collections.Generic.IReadOnlyCollection
        <Microsoft.SystemForCrossDomainIdentityManagement.OperationValue> Value
        { get; }
    
      public void AddValue(
        Microsoft.SystemForCrossDomainIdentityManagement.OperationValue value);
      }
    
      public enum OperationName
      {
        Add,
        Remove,
        Replace
      }
    
      public interface IPath
      {
        string AttributePath { get; }
        System.Collections.Generic.IReadOnlyCollection<IFilter> SubAttributes { get; }
        Microsoft.SystemForCrossDomainIdentityManagement.IPath ValuePath { get; }
      }
    
      public class OperationValue
      {
        public string Reference
        { get; set; }
    
        public string Value
        { get; set; }
      }
    

    En el ejemplo de una solicitud para actualizar un usuario, el objeto proporcionado como el valor del argumento patch tiene estos valores de propiedad:In the example of a request to update a user, the object provided as the value of the patch argument has these property values:

    • ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    • (PatchRequest as PatchRequest2).Operations.Count: 1(PatchRequest as PatchRequest2).Operations.Count: 1
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).OperationName: OperationName.Add(PatchRequest as PatchRequest2).Operations.ElementAt(0).OperationName: OperationName.Add
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Path.AttributePath: "manager"(PatchRequest as PatchRequest2).Operations.ElementAt(0).Path.AttributePath: "manager"
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.Count: 1(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.Count: 1
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Reference: http://.../scim/Users/2819c223-7f76-453a-919d-413861904646(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Reference: http://.../scim/Users/2819c223-7f76-453a-919d-413861904646
    • (PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value: 2819c223-7f76-453a-919d-413861904646(PatchRequest as PatchRequest2).Operations.ElementAt(0).Value.ElementAt(0).Value: 2819c223-7f76-453a-919d-413861904646
  2. Para cancelar el aprovisionamiento de un usuario de un almacén de identidades dirigido por un servicio SCIM, Azure AD envía una solicitud como esta:To de-provision a user from an identity store fronted by an SCIM service, Azure AD sends a request such as:

      DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
      Authorization: Bearer ...
    

    Si el servicio se creó mediante las bibliotecas Common Language Infrastructure proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce a una llamada al método Delete del proveedor del servicio.If the service was built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Delete method of the service’s provider. Este método tiene esta firma:That method has this signature:

      // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
      // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
      // is defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
      System.Threading.Tasks.Task Delete(
        Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier  
          resourceIdentifier, 
        string correlationIdentifier);
    

    El objeto proporcionado como el valor del argumento resourceIdentifier tiene tendrá estos valores de propiedad en el ejemplo anterior de una solicitud de cancelación del aprovisionamiento de un usuario:The object provided as the value of the resourceIdentifier argument has these property values in the example of a request to de-provision a user:

  3. Para cancelar el aprovisionamiento de un usuario de un almacén de identidades dirigido por un servicio SCIM, Azure AD envía una solicitud como esta:To de-provision a user from an identity store fronted by an SCIM service, Azure AD sends a request such as:

     DELETE ~/scim/Users/54D382A4-2050-4C03-94D1-E769F1D15682 HTTP/1.1
     Authorization: Bearer ...
    

    Si el servicio se creó mediante las bibliotecas de CLI proporcionadas por Microsoft para implementar servicios SCIM, la solicitud se traduce en una llamada al método Delete del proveedor del servicio.If the service was built using the CLI libraries provided by Microsoft for implementing SCIM services, then the request is translated into a call to the Delete method of the service’s provider. Este método tiene esta firma:That method has this signature:

     // System.Threading.Tasks.Tasks is defined in mscorlib.dll.  
     // Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier, 
     // is defined in Microsoft.SystemForCrossDomainIdentityManagement.Protocol. 
     System.Threading.Tasks.Task Delete(
       Microsoft.SystemForCrossDomainIdentityManagement.IResourceIdentifier  
         resourceIdentifier, 
       string correlationIdentifier);
    

    El objeto proporcionado como el valor del argumento resourceIdentifier tiene tendrá estos valores de propiedad en el ejemplo anterior de una solicitud de cancelación del aprovisionamiento de un usuario:The object provided as the value of the resourceIdentifier argument has these property values in the example of a request to de-provision a user:

    • ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"ResourceIdentifier.Identifier: "54D382A4-2050-4C03-94D1-E769F1D15682"
    • ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"ResourceIdentifier.SchemaIdentifier: "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"

Referencia de esquema de grupo y usuarioUser and group schema reference

Azure Active Directory puede aprovisionar dos tipos de recursos a los servicios web SCIM.Azure Active Directory can provision two types of resources to SCIM web services. Esos tipos de recursos son los usuarios y grupos.Those types of resources are users and groups.

Los recursos de usuario se identifican mediante el identificador de esquema urn:ietf:params:scim:schemas:extension:enterprise:2.0:User, que se incluye en esta especificación del protocolo: https://tools.ietf.org/html/rfc7643.User resources are identified by the schema identifier, urn:ietf:params:scim:schemas:extension:enterprise:2.0:User, which is included in this protocol specification: https://tools.ietf.org/html/rfc7643. La asignación predeterminada entre los atributos de los grupos de Azure Active Directory y los atributos de los recursos se proporciona en la Tabla 1.The default mapping of the attributes of users in Azure Active Directory to the attributes of user resources is provided in Table 1.

Los recursos del grupo se identifican mediante el identificado de esquema urn:ietf:params:scim:schemas:core:2.0:Group.Group resources are identified by the schema identifier, urn:ietf:params:scim:schemas:core:2.0:Group. En la Tabla 2, se muestra la asignación predeterminada entre los atributos de los grupos de Azure Active Directory y los atributos de los recursos.Table 2 shows the default mapping of the attributes of groups in Azure Active Directory to the attributes of group resources.

Tabla 1: Asignación de atributos de usuario predeterminadaTable 1: Default user attribute mapping

Usuario de Azure Active DirectoryAzure Active Directory user "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User""urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
IsSoftDeletedIsSoftDeleted activeactive
DisplayNamedisplayName DisplayNamedisplayName
Facsimile-TelephoneNumberFacsimile-TelephoneNumber phoneNumbers[type eq "fax"].valuephoneNumbers[type eq "fax"].value
givenNamegivenName name.givenNamename.givenName
jobTitlejobTitle títulotitle
mailmail emails[type eq "work"].valueemails[type eq "work"].value
mailNicknamemailNickname externalIdexternalId
managermanager managermanager
mobilemobile phoneNumbers[type eq "mobile"].valuephoneNumbers[type eq "mobile"].value
objectIdobjectId idID
postalCodepostalCode addresses[type eq "work"].postalCodeaddresses[type eq "work"].postalCode
proxy-Addressesproxy-Addresses emails[type eq "other"].Valueemails[type eq "other"].Value
physical-Delivery-OfficeNamephysical-Delivery-OfficeName addresses[type eq "other"].Formattedaddresses[type eq "other"].Formatted
streetAddressstreetAddress addresses[type eq "work"].streetAddressaddresses[type eq "work"].streetAddress
surnamesurname name.familyNamename.familyName
telephone-Numbertelephone-Number phoneNumbers[type eq "work"].valuephoneNumbers[type eq "work"].value
user-PrincipalNameuser-PrincipalName userNameuserName

Tabla 2: Asignación de atributos de grupo predeterminadaTable 2: Default group attribute mapping

Grupo de Azure Active DirectoryAzure Active Directory group urn:ietf:params:scim:schemas:core:2.0:Groupurn:ietf:params:scim:schemas:core:2.0:Group
DisplayNamedisplayName externalIdexternalId
mailmail emails[type eq "work"].valueemails[type eq "work"].value
mailNicknamemailNickname DisplayNamedisplayName
membersmembers membersmembers
objectIdobjectId idID
proxyAddressesproxyAddresses emails[type eq "other"].Valueemails[type eq "other"].Value

Permiso para que las direcciones IP usadas por el servicio de aprovisionamiento de Azure AD realicen solicitudes SCIMAllow IP addresses used by the Azure AD provisioning service to make SCIM requests

Determinadas aplicaciones permiten el tráfico de entrada a su aplicación.Certain apps allow inbound traffic to their app. Para que el servicio de aprovisionamiento de Azure AD funcione según lo previsto, se tienen que permitir las direcciones IP usadas.In order for the Azure AD provisioning service to function as expected, the IP addresses used must be allowed. Para obtener una lista de direcciones IP para cada etiqueta o región de servicio, consulte el archivo JSON Rangos de direcciones IP y etiquetas de servicio de Azure: nube pública.For a list of IP addresses for each service tag/region, see the JSON file - Azure IP Ranges and Service Tags – Public Cloud. Puede descargar y programa estas direcciones IP en el firewall según sea necesario.You can download and program these IPs into your firewall as needed. Los intervalos IP reservados para el aprovisionamiento de Azure AD se pueden encontrar en "AzureActiveDirectoryDomainServices".The reserved IP ranges for Azure AD provisioning can be found under "AzureActiveDirectoryDomainServices."