Uso di System for Cross-Domain Identity Management per abilitare il provisioning automatico di utenti e gruppi da Azure Active Directory ad applicazioniUsing System for Cross-Domain Identity Management to automatically provision users and groups from Azure Active Directory to applications

PanoramicaOverview

Azure Active Directory (Azure AD) può effettuare automaticamente il provisioning di utenti e gruppi in qualsiasi applicazione o archivio identità gestito da un servizio Web con interfaccia definita nella specifica del protocollo System for Cross-Domain Identity Management (SCIM) 2.0.Azure Active Directory (Azure AD) can automatically provision users and groups to any application or identity store that is fronted by a web service with the interface defined in the System for Cross-Domain Identity Management (SCIM) 2.0 protocol specification. Azure Active Directory può inviare richieste per creare, modificare o eliminare utenti e gruppi assegnati al servizio Web,Azure Active Directory can send requests to create, modify, or delete assigned users and groups to the web service. che converte quindi le richieste in operazioni sull'archivio identità di destinazione.The web service can then translate those requests into operations on the target identity store.

Figura 1: Provisioning da Azure Active Directory a un archivio identità tramite un servizio Web Figure 1: Provisioning from Azure Active Directory to an identity store via a web service

Questa funzione può essere usata insieme alla funzionalità "bring your own app" in Azure AD per abilitare l'accesso Single Sign-On e il provisioning utenti automatico in applicazioni che offrono o sono gestite da un servizio Web SCIM.This capability can be used in conjunction with the “bring your own app” capability in Azure AD to enable single sign-on and automatic user provisioning for applications that provide or are fronted by a SCIM web service.

Esistono due casi in cui SCIM viene usato in Azure Active Directory:There are two use cases for using SCIM in Azure Active Directory:

  • Provisioning di utenti e gruppi in applicazioni che supportano SCIM: le applicazioni che supportano SCIM 2.0 e usano token di connessione OAuth per l'autenticazione possono essere usate con Azure AD senza interventi di configurazione.Provisioning users and groups to applications that support SCIM Applications that support SCIM 2.0 and use OAuth bearer tokens for authentication works with Azure AD without configuration.
  • Compilazione di una soluzione di provisioning per le applicazioni che supportano il provisioning basato su altre API: in caso di applicazioni non SCIM, è possibile creare un endpoint SCIM da convertire tra l'endpoint SCIM di Azure AD e qualsiasi API supportata dall'applicazione per il provisioning utente.Build your own provisioning solution for applications that support other API-based provisioning For non-SCIM applications, you can create a SCIM endpoint to translate between the Azure AD SCIM endpoint and any API the application supports for user provisioning. Per facilitare lo sviluppo di un endpoint SCIM, vengono fornite librerie CLI (Common Language Infrastructure) ed esempi di codice che illustrano come creare un endpoint SCIM e convertire messaggi SCIM.To help you develop a SCIM endpoint, we provide Common Language Infrastructure (CLI) libraries along with code samples that show you how to do provide a SCIM endpoint and translate SCIM messages.

Provisioning di utenti e gruppi in applicazioni che supportano SCIMProvisioning users and groups to applications that support SCIM

Azure AD può essere configurato in modo da effettuare automaticamente il provisioning di determinati utenti e gruppi in applicazioni che implementano un servizio Web System for Cross-domain Identity Management 2 (SCIM) e accettano token di connessione OAuth per l'autenticazione.Azure AD can be configured to automatically provision assigned users and groups to applications that implement a System for Cross-domain Identity Management 2 (SCIM) web service and accept OAuth bearer tokens for authentication. Nell'ambito della specifica SCIM 2.0, le applicazioni devono soddisfare i requisiti seguenti:Within the SCIM 2.0 specification, applications must meet these requirements:

  • Supportare la creazione di utenti e/o gruppi, come indicato nella sezione 3.3 del protocollo SCIM.Supports creating users and/or groups, as per section 3.3 of the SCIM protocol.
  • Supportare la modifica di utenti e/o gruppi con richieste patch, come indicato nella sezione 3.5.2 del protocollo SCIM.Supports modifying users and/or groups with patch requests as per section 3.5.2 of the SCIM protocol.
  • Supportare il recupero di una risorsa nota, come indicato nella sezione 3.4.1 del protocollo SCIM.Supports retrieving a known resource as per section 3.4.1 of the SCIM protocol.
  • Supportare l'interrogazione di utenti e/o gruppi, come indicato nella sezione 3.4.2 del protocollo SCIM.Supports querying users and/or groups, as per section 3.4.2 of the SCIM protocol. Per impostazione predefinita, gli utenti vengono interrogati da externalId e i gruppi da displayName.By default, users are queried by externalId and groups are queried by displayName.
  • Supportare l'interrogazione di utenti in base all'ID o al responsabile, come indicato nella sezione 3.4.2 del protocollo SCIM.Supports querying user by ID and by manager as per section 3.4.2 of the SCIM protocol.
  • Supportare l'interrogazione di gruppi in base all'ID o ai membri, come indicato nella sezione 3.4.2 del protocollo SCIM.Supports querying groups by ID and by member as per section 3.4.2 of the SCIM protocol.
  • Accettare token di connessione OAuth per l'autorizzazione, come indicato nella sezione 2.1 del protocollo SCIM.Accepts OAuth bearer tokens for authorization as per section 2.1 of the SCIM protocol.

Verificare la conformità ai requisiti sopra riportati con il provider dell'applicazione o consultando la documentazione fornita dal provider.Check with your application provider, or your application provider's documentation for statements of compatibility with these requirements.

IntroduzioneGetting started

Le applicazioni che supportano il profilo SCIM descritto in questo articolo possono essere connesse ad Azure Active Directory usando la funzionalità "Applicazione non nella raccolta" nella raccolta di applicazioni di 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 volta stabilita la connessione, Azure AD esegue un processo di sincronizzazione ogni 20 minuti in cui interroga l'endpoint SCIM dell'applicazione in merito agli utenti e ai gruppi assegnati e li crea o li modifica in base alle istruzioni di assegnazione.Once connected, Azure AD runs a synchronization process every 20 minutes where it queries the application's SCIM endpoint for assigned users and groups, and creates or modifies them according to the assignment details.

Per connettere un'applicazione che supporta SCIM:To connect an application that supports SCIM:

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Passare ad Azure Active Directory > Applicazioni aziendali e selezionare **Nuova applicazione > Tutte > Applicazione non nella raccolta.Browse to Azure Active Directory > Enterprise Applications, and select **New application > All > Non-gallery application.
  3. Immettere un nome per l'applicazione e fare clic sull'icona Aggiungi per creare un oggetto app.Enter a name for your application, and click Add icon to create an app object.

    Figura 2: Raccolta di applicazioni di Azure AD Figure 2: Azure AD application gallery

  4. Nella schermata risultante selezionare la scheda Provisioning nella colonna sinistra.In the resulting screen, select the Provisioning tab in the left column.

  5. Nel menu Modalità di provisioning selezionare Automatica.In the Provisioning Mode menu, select Automatic.

    Figura 3: Configurazione del provisioning nel portale di Azure Figure 3: Configuring provisioning in the Azure portal

  6. Nel campo URL tenant immettere l'URL dell'endpoint SCIM dell'applicazione.In the Tenant URL field, enter the URL of the application's SCIM endpoint. Esempio: https://api.contoso.com/scim/v2/Example: https://api.contoso.com/scim/v2/

  7. Se l'endpoint SCIM richiede un token di connessione OAuth da un'autorità di certificazione diversa da Azure AD, copiare il token di connessione OAuth nel campo Token segreto facoltativo.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. Se questo campo viene lasciato vuoto, AD Azure include in ogni richiesta un token di connessione OAuth emesso da Azure AD.If this field is left blank, then Azure AD included an OAuth bearer token issued from Azure AD with each request. Le app che usano Azure AD come provider di identità possono convalidare il token rilasciato da Azure AD.Apps that use Azure AD as an identity provider can validate this Azure AD -issued token.
  8. Fare clic sul pulsante Test connessione per fare in modo che Azure Active Directory provi a connettersi all'endpoint SCIM.Click the Test Connection button to have Azure Active Directory attempt to connect to the SCIM endpoint. Se i tentativi hanno esito negativo, verranno visualizzate informazioni sul tipo di errore.If the attempts fail, error information is displayed.
  9. Se i tentativi di connessione all'applicazione hanno esito positivo, fare clic su Salva per salvare le credenziali di amministratore.If the attempts to connect to the application succeed, then click Save to save the admin credentials.
  10. Nella sezione Mapping sono disponibili due set selezionabili di mapping degli attributi: uno per gli oggetti utente e uno per gli oggetti gruppo.In the Mappings section, there are two selectable sets of attribute mappings: one for user objects and one for group objects. Selezionare ognuno dei due set per esaminare gli attributi sincronizzati da Active Directory di Azure con l'app.Select each one to review the attributes that are synchronized from Azure Active Directory to your app. Gli attributi selezionati come proprietà corrispondenti vengono usati per trovare le corrispondenze con gli utenti e i gruppi nell'app per le operazioni di aggiornamento.The attributes selected as Matching properties are used to match the users and groups in your app for update operations. Selezionare il pulsante Salva per eseguire il commit delle modifiche.Select the Save button to commit any changes.

    Nota

    Facoltativamente, è possibile disattivare la sincronizzazione degli oggetti gruppo disabilitando il mapping relativo ai gruppi.You can optionally disable syncing of group objects by disabling the "groups" mapping.

  11. In Impostazioni, il campo Ambito definisce gli utenti e/o i gruppi che devono essere sincronizzati.Under Settings, the Scope field defines which users and or groups are synchronized. Se si seleziona "Sync only assigned users and groups" ("Sincronizza solo utenti e gruppi assegnati") (scelta consigliata), verranno sincronizzati solo gli utenti e i gruppi assegnati nella scheda Utenti e gruppi.Selecting "Sync only assigned users and groups" (recommended) will only sync users and groups assigned in the Users and groups tab.

  12. Al termine della configurazione, impostare lo Stato del provisioning su .Once your configuration is complete, change the Provisioning Status to On.
  13. Fare clic su Salva per avviare il servizio di provisioning di Azure AD.Click Save to start the Azure AD provisioning service.
  14. Se si sceglie di sincronizzare solo gli utenti e i gruppi assegnati (scelta consigliata), assicurarsi di selezionare la scheda Utenti e gruppi e di assegnare gli utenti e/o i gruppi che si vuole sincronizzare.If syncing only assigned users and groups (recommended), be sure to select the Users and groups tab and assign the users and/or groups you wish to sync.

Dopo aver avviato la sincronizzazione iniziale, è possibile usare la scheda Log di controllo per monitorare lo stato di avanzamento, che mostra tutte le azioni eseguite dal servizio di provisioning sull'app.Once the initial synchronization has started, you can use the Audit logs tab to monitor progress, which shows all actions performed by the provisioning service on your app. Per altre informazioni sulla lettura dei log di provisioning di Azure AD, vedere l'esercitazione relativa alla creazione di report sul provisioning automatico degli account utente.For more information on how to read the Azure AD provisioning logs, see Reporting on automatic user account provisioning.

Nota

La sincronizzazione iniziale richiede più tempo delle sincronizzazioni successive, che saranno eseguite circa ogni 20 minuti per tutto il tempo che il servizio è in esecuzione.The initial sync takes longer to perform than subsequent syncs, which occur approximately every 20 minutes as long as the service is running.

Creazione di una soluzione di provisioning personale per qualsiasi applicazioneBuilding your own provisioning solution for any application

Creando un servizio Web SCIM in grado di interagire con Azure Active Directory, è possibile abilitare l'accesso Single Sign-On e il provisioning utente automatico per qualsiasi applicazione che offra un'API di provisioning utente REST o SOAP.By creating a SCIM web service that interfaces with Azure Active Directory, you can enable single sign-on and automatic user provisioning for virtually any application that provides a REST or SOAP user provisioning API.

Il servizio funziona nel modo seguente:Here’s how it works:

  1. Azure AD fornisce una libreria Common Language Infrastructure denominata Microsoft.SystemForCrossDomainIdentityManagement.Azure AD provides a common language infrastructure library named Microsoft.SystemForCrossDomainIdentityManagement. Gli integratori di sistemi e gli sviluppatori possono usare questa libreria per creare e distribuire un endpoint di servizio Web basato su SCIM in grado di connettere Azure AD all'archivio identità di qualsiasi applicazione.System integrators and developers can use this library to create and deploy a SCIM-based web service endpoint capable of connecting Azure AD to any application’s identity store.
  2. I mapping vengono implementati nel servizio Web per il mapping dello schema utente standardizzato allo schema utente e al protocollo richiesto dall'applicazione.Mappings are implemented in the web service to map the standardized user schema to the user schema and protocol required by the application.
  3. L'URL dell'endpoint viene registrato in Azure AD come parte di un'applicazione personalizzata nella raccolta di applicazioni.The endpoint URL is registered in Azure AD as part of a custom application in the application gallery.
  4. Gli utenti e i gruppi vengono assegnati a questa applicazione in Azure AD.Users and groups are assigned to this application in Azure AD. In fase di assegnazione, vengono inseriti in una coda per la sincronizzazione con l'applicazione di destinazione.Upon assignment, they are put into a queue to be synchronized to the target application. Il processo di sincronizzazione che gestisce la coda viene eseguito ogni 20 minuti.The synchronization process handling the queue runs every 20 minutes.

Esempi di codiceCode Samples

Per semplificare il processo, viene fornito un set di esempi di codice che creano un endpoint di servizio Web SCIM e illustrano il provisioning automatico.To make this process easier, a set of code samples are provided that create a SCIM web service endpoint and demonstrate automatic provisioning. Un esempio è relativo a un provider che gestisce un file con righe di valori delimitati da virgole che rappresentano utenti e gruppi.One sample is of a provider that maintains a file with rows of comma-separated values representing users and groups. L'altro esempio è relativo a un provider che agisce sul servizio Amazon Web Services Identity e Access Management.The other is of a provider that operates on the Amazon Web Services Identity and Access Management service.

PrerequisitiPrerequisites

IntroduzioneGetting Started

Il modo più semplice per implementare un endpoint SCIM in grado di accettare richieste di provisioning da Azure AD consiste nel compilare e distribuire l'esempio di codice che fornisce come output gli utenti con provisioning in un file CSV (Comma-Separated Value).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.

Per creare un endpoint SCIM di esempio:To create a sample SCIM endpoint:

  1. Scaricare il pacchetto del codice di esempio dal sito 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. Decomprimere il pacchetto e salvarlo nel computer Windows in un percorso analogo a 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. In questa cartella avviare la soluzione FileProvisioningAgent in Visual Studio.In this folder, launch the FileProvisioningAgent solution in Visual Studio.
  4. Selezionare Strumenti > Library Package Manager (Gestione pacchetti libreria) > Console di Gestione pacchetti ed eseguire i comandi seguenti per il progetto FileProvisioningAgent per risolvere i riferimenti alla soluzione:Select Tools > Library Package Manager > Package Manager Console, and execute the following commands for the FileProvisioningAgent project to resolve the solution references: Install-Package Microsoft.SystemForCrossDomainIdentityManagement Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory Install-Package Microsoft.Owin.Diagnostics Install-Package Microsoft.Owin.Host.SystemWeb
  5. Compilare il progetto FileProvisioningAgent.Build the FileProvisioningAgent project.
  6. Avviare l'applicazione prompt dei comandi in Windows come amministratore e usare il comando cd per passare alla cartella \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\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\ProvisioningAgent\bin\Debug folder.
  7. Eseguire il comando seguente, sostituendo con l'indirizzo IP o il nome di dominio del computer Windows:Run the following command, replacing with the IP address or domain name of the Windows machine: FileAgnt.exe http://<ip-address>:9000 TargetFile.csv
  8. In Windows, in Impostazioni di Windows > Rete e Internet, selezionare Windows Firewall > Impostazioni avanzate e quindi creare una Nuova regola connessioni in entrata che consente l'accesso in ingresso alla porta 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. Se il computer Windows si trova dietro un router, è necessario configurare il router in modo che esegua NAT (Network Access Translation) tra la rispettiva porta 9000 esposta a Internet e la porta 9000 nel computer Windows.If the Windows machine is behind a router, the router needs to be configured to perform Network Access Translation between its port 9000 that is exposed to the internet, and port 9000 on the Windows machine. Questo è necessario per consentire ad Azure AD di accedere a questo endpoint sul cloud.This is required for Azure AD to be able to access this endpoint in the cloud.

Per registrare l'endpoint SCIM di esempio in Azure AD:To register the sample SCIM endpoint in Azure AD:

  1. Accedere al portale di Azure.Sign in to the Azure portal.
  2. Passare ad Azure Active Directory > Applicazioni aziendali e selezionare **Nuova applicazione > Tutte > Applicazione non nella raccolta.Browse to Azure Active Directory > Enterprise Applications, and select **New application > All > Non-gallery application.
  3. Immettere un nome per l'applicazione e fare clic sull'icona Aggiungi per creare un oggetto app.Enter a name for your application, and click Add icon to create an app object. L'oggetto applicazione creato deve rappresentare l'app di destinazione in cui verrà effettuato il provisioning e per cui verrà implementato l'accesso Single Sign-On, non solo l'endpoint 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.
  4. Nella schermata risultante selezionare la scheda Provisioning nella colonna sinistra.In the resulting screen, select the Provisioning tab in the left column.
  5. Nel menu Modalità di provisioning selezionare Automatica.In the Provisioning Mode menu, select Automatic.

    Figura 4: Configurazione del provisioning nel portale di Azure Figure 4: Configuring provisioning in the Azure portal

  6. Nel campo URL tenant immettere l'URL esposto a Internet e la porta dell'endpoint SCIM.In the Tenant URL field, enter the internet-exposed URL and port of your SCIM endpoint. Questi valori saranno simili a http://testmachine.contoso.com:9000 o a http://:9000/, dove è l'indirizzo IP esposto a Internet.This would be something like http://testmachine.contoso.com:9000 or http://:9000/, where is the internet exposed IP address.

  7. Se l'endpoint SCIM richiede un token di connessione OAuth da un'autorità di certificazione diversa da Azure AD, copiare il token di connessione OAuth nel campo Token segreto facoltativo.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. Se questo campo viene lasciato vuoto, AD Azure includerà in ogni richiesta un token di connessione OAuth emesso da Azure AD.If this field is left blank, then Azure AD will include an OAuth bearer token issued from Azure AD with each request. Le app che usano Azure AD come provider di identità possono convalidare il token rilasciato da Azure AD.Apps that use Azure AD as an identity provider can validate this Azure AD -issued token.
  8. Fare clic sul pulsante Test connessione per fare in modo che Azure Active Directory provi a connettersi all'endpoint SCIM.Click the Test Connection button to have Azure Active Directory attempt to connect to the SCIM endpoint. Se i tentativi hanno esito negativo, verranno visualizzate informazioni sul tipo di errore.If the attempts fail, error information is displayed.
  9. Se i tentativi di connessione all'applicazione hanno esito positivo, fare clic su Salva per salvare le credenziali di amministratore.If the attempts to connect to the application succeed, then click Save to save the admin credentials.
  10. Nella sezione Mapping sono disponibili due set selezionabili di mapping degli attributi: uno per gli oggetti utente e uno per gli oggetti gruppo.In the Mappings section, there are two selectable sets of attribute mappings: one for user objects and one for group objects. Selezionare ognuno dei due set per esaminare gli attributi sincronizzati da Active Directory di Azure con l'app.Select each one to review the attributes that are synchronized from Azure Active Directory to your app. Gli attributi selezionati come proprietà corrispondenti vengono usati per trovare le corrispondenze con gli utenti e i gruppi nell'app per le operazioni di aggiornamento.The attributes selected as Matching properties are used to match the users and groups in your app for update operations. Selezionare il pulsante Salva per eseguire il commit delle modifiche.Select the Save button to commit any changes.
  11. In Impostazioni, il campo Ambito definisce gli utenti e/o i gruppi che devono essere sincronizzati.Under Settings, the Scope field defines which users and or groups are synchronized. Se si seleziona "Sync only assigned users and groups" ("Sincronizza solo utenti e gruppi assegnati") (scelta consigliata), verranno sincronizzati solo gli utenti e i gruppi assegnati nella scheda Utenti e gruppi.Selecting "Sync only assigned users and groups" (recommended) will only sync users and groups assigned in the Users and groups tab.
  12. Al termine della configurazione, impostare lo Stato del provisioning su .Once your configuration is complete, change the Provisioning Status to On.
  13. Fare clic su Salva per avviare il servizio di provisioning di Azure AD.Click Save to start the Azure AD provisioning service.
  14. Se si sceglie di sincronizzare solo gli utenti e i gruppi assegnati (scelta consigliata), assicurarsi di selezionare la scheda Utenti e gruppi e di assegnare gli utenti e/o i gruppi che si vuole sincronizzare.If syncing only assigned users and groups (recommended), be sure to select the Users and groups tab and assign the users and/or groups you wish to sync.

Dopo aver avviato la sincronizzazione iniziale, è possibile usare la scheda Log di controllo per monitorare lo stato di avanzamento, che mostra tutte le azioni eseguite dal servizio di provisioning sull'app.Once the initial synchronization has started, you can use the Audit logs tab to monitor progress, which shows all actions performed by the provisioning service on your app. Per altre informazioni sulla lettura dei log di provisioning di Azure AD, vedere l'esercitazione relativa alla creazione di report sul provisioning automatico degli account utente.For more information on how to read the Azure AD provisioning logs, see Reporting on automatic user account provisioning.

Il passaggio finale della verifica dell'esempio consiste nell'aprire il file TargetFile.csv nella cartella \AzureAD-BYOA-Provisioning-Samples\ProvisioningAgent\bin\Debug del computer 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. Dopo l'esecuzione del processo di provisioning, questo file include i dettagli di tutti gli utenti e gruppi assegnati e sottoposti a provisioning.Once the provisioning process is run, this file shows the details of all assigned and provisioned users and groups.

Librerie di sviluppoDevelopment libraries

Per sviluppare un servizio Web personalizzato conforme alla specifica SCIM, è necessario prima di tutto acquisire familiarità con le librerie Microsoft seguenti per accelerare il processo di sviluppo: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:

  1. Le librerie CLI (Common Language Infrastructure) vengono messe a disposizione per essere usate con linguaggi basati su questa infrastruttura, ad esempio C#.Common Language Infrastructure (CLI) libraries are offered for use with languages based on that infrastructure, such as C#. Una di queste librerie, Microsoft.SystemForCrossDomainIdentityManagement.Service, dichiara un'interfaccia, Microsoft.SystemForCrossDomainIdentityManagement.IProvider, illustrata nella figura seguente. Uno sviluppatore che usa le librerie implementerà questa interfaccia con una classe a cui è possibile fare riferimento, in modo generico, come provider.One of those libraries, Microsoft.SystemForCrossDomainIdentityManagement.Service, declares an interface, Microsoft.SystemForCrossDomainIdentityManagement.IProvider, shown in the following illustration: A developer using the libraries would implement that interface with a class that may be referred to, generically, as a provider. Le librerie consentono agli sviluppatori di distribuire un servizio Web conforme alla specifica SCIM,The libraries enable the developer to deploy a web service that conforms to the SCIM specification. che può essere ospitato sia in Internet Information Services sia in qualsiasi assembly Common Language Infrastructure eseguibile.The web service can be either hosted within Internet Information Services, or any executable Common Language Infrastructure assembly. La richiesta viene convertita in chiamate ai metodi del provider, che saranno programmate dallo sviluppatore per agire su un archivio identità.Request is translated into calls to the provider’s methods, which would be programmed by the developer to operate on some identity store.

  2. I gestori di ExpressRoute sono disponibili per l'analisi di oggetti richiesta node.js che rappresentano chiamate, in base alla definizione della specifica SCIM, effettuate a un servizio Web 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.

Creazione di un endpoint SCIM personalizzatoBuilding a Custom SCIM Endpoint

Usando le librerie CLI, gli sviluppatori possono ospitare i servizi in un assembly Common Language Infrastructure eseguibile o in Internet Information Services.Using the CLI libraries, developers using those libraries can host their services within any executable Common Language Infrastructure assembly, or within Internet Information Services. Ecco del codice di esempio per l'hosting di un servizio in un assembly eseguibile all'indirizzo 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;
    }
}
}

Questo servizio deve avere un indirizzo HTTP e un certificato di autenticazione server la cui autorità di certificazione radice è una delle seguenti:This service must have an HTTP address and server authentication certificate of which the root certification authority is one of the following:

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

Un certificato di autenticazione server può essere associato a una porta su un host Windows usando l'utilità shell di rete: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}  

Il valore fornito per l'argomento certhash è l'identificazione personale del certificato, mentre il valore specificato per l'argomento appid è un identificatore univoco globale 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.

Per ospitare il servizio in Internet Information Services, uno sviluppatore deve creare un assembly della libreria di codice CLA con una classe denominata Startup nello spazio dei nomi predefinito dell'assembly.To host the service within Internet Information Services, a developer would build a CLA code library assembly with a class named Startup in the default namespace of the assembly. Ecco un esempio di questa classe: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 in Owin.dll.  
{
    this.starter.ConfigureApplication(builder);
}
}

Gestione dell'autenticazione dell'endpointHandling endpoint authentication

Le richieste da Azure Active Directory includono un token di connessione OAuth 2.0.Requests from Azure Active Directory include an OAuth 2.0 bearer token. Qualsiasi servizio che riceve la richiesta deve autenticare l'emittente come Azure Active Directory per conto del tenant Azure Active Directory previsto, per l'accesso al servizio Web Graph di Azure Active Directory.Any service receiving the request should authenticate the issuer as being Azure Active Directory on behalf of the expected Azure Active Directory tenant, for access to the Azure Active Directory Graph web service. Nel token, l'autorità di certificazione è identificata da un'attestazione ISS, ad esempio "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/". In questo esempio, l'indirizzo di base del valore dell'attestazione, https://sts.windows.net, identifica Azure Active Directory come autorità di certificazione, mentre il segmento dell'indirizzo relativo, cbb1a5ac-f33b-45fa-9bf5-f37db0fed422, è un identificatore univoco del tenant di Azure Active Directory per conto del quale è stato emesso il 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 on behalf of which the token was issued. Se il token è stato emesso per l'accesso al servizio Web Graph di Azure Active Directory, l'identificatore di quel servizio, 00000002-0000-0000-c000-000000000000, deve essere incluso nel valore dell'attestazione aud del token.If the token was issued for accessing the Azure Active Directory Graph web service, then the identifier of that service, 00000002-0000-0000-c000-000000000000, should be in the value of the token’s aud claim.

Gli sviluppatori che usano le librerie CLA fornite da Microsoft per la creazione di un servizio SCIM possono autenticare le richieste da Azure Active Directory mediante il pacchetto Microsoft.Owin.Security.ActiveDirectory seguendo questa procedura:Developers using the CLA 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. In un provider implementare la proprietà Microsoft.SystemForCrossDomainIdentityManagement.IProvider.StartupBehavior facendo in modo che restituisca un metodo da chiamare ogni volta che viene avviato il servizio: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. Aggiungere il codice seguente al metodo, in modo che qualsiasi richiesta a uno degli endpoint del servizio venga autenticata come se includesse un token emesso da Azure Active Directory per conto di un tenant specifico, per l'accesso al servizio Web Graph di Azure AD: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 on behalf of 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 = "00000002-0000-0000-c000-000000000000"
         };
    
       // 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);
     }
    

Schema di utenti e gruppiUser and group schema

Azure Active Directory può effettuare il provisioning di due tipi di risorse nei servizi Web SCIM,Azure Active Directory can provision two types of resources to SCIM web services. ovvero utenti e gruppi.Those types of resources are users and groups.

Le risorse utente sono rilevate dall'identificatore dello schema, urn:ietf:params:scim:schemas:extension:enterprise:2.0:User, incluso in questa specifica del protocollo: http://tools.ietf.org/html/draft-ietf-scim-core-schema.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: http://tools.ietf.org/html/draft-ietf-scim-core-schema. Il mapping predefinito degli attributi degli utenti in Azure Active Directory agli attributi delle risorse urn:ietf:params:scim:schemas:extension:enterprise:2.0:User è disponibile nella tabella 1 seguente.The default mapping of the attributes of users in Azure Active Directory to the attributes of urn:ietf:params:scim:schemas:extension:enterprise:2.0:User resources is provided in table 1, below.

Le risorse gruppo sono identificate dall'identificatore dello schema, http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group.Group resources are identified by the schema identifier, http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group. La tabella 2 riportata di seguito illustra il mapping predefinito degli attributi di gruppi di Azure Active Directory agli attributi delle risorse http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group.Table 2, below, shows the default mapping of the attributes of groups in Azure Active Directory to the attributes of http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group resources.

Tabella 1: mapping predefinito degli attributi utenteTable 1: Default user attribute mapping

Utente Azure Active DirectoryAzure Active Directory user urn:ietf:params:scim:schemas:extension:enterprise:2.0:Userurn: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 titletitle
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

Tabella 2: mapping predefinito degli attributi gruppoTable 2: Default group attribute mapping

Gruppo di Azure Active DirectoryAzure Active Directory group http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group
displayNamedisplayName externalIdexternalId
mailmail emails[type eq "work"].valueemails[type eq "work"].value
mailNicknamemailNickname displayNamedisplayName
Membri dimembers Membri dimembers
objectIdobjectId idid
proxyAddressesproxyAddresses emails[type eq "other"].Valueemails[type eq "other"].Value

Provisioning e deprovisioning utentiUser provisioning and de-provisioning

La figura seguente illustra i messaggi che Azure Active Directory invia al servizio SCIM per gestire il ciclo di vita di un utente in un altro archivio identità.The following illustration shows the messages that Azure Active Directory sends to a SCIM service to manage the lifecycle of a user in another identity store. Il diagramma illustra anche il modo in cui un servizio SCIM implementato mediante le librerie CLI fornite da Microsoft per la creazione di questi servizi converte queste richieste in chiamate ai metodi di un provider.The diagram also shows how a SCIM service implemented using the CLI libraries provided by Microsoft for building such services translate those requests into calls to the methods of a provider.

Figura 5: Sequenza di provisioning e deprovisioning utenti Figure 5: User provisioning and de-provisioning sequence

  1. Azure Active Directory esegue query nel servizio per trovare un utente con valore dell'attributo externalId corrispondente al valore dell'attributo mailNickname di un utente in 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 query viene espressa come richiesta HTTP (Hypertext Transfer Protocol) analoga a quella dell'esempio, dove jyoung è un esempio di mailNickname di un utente in 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:

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

    Se il servizio è stato creato mediante le librerie Common Language Infrastructure fornite da Microsoft per implementare i servizi SCIM, la richiesta viene convertita in una chiamata al metodo Query del provider del servizio.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. Ecco la firma del metodo: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);
    

    Ecco la definizione dell'interfaccia 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
     }
    

    Nell'esempio seguente di una query per un utente con un determinato valore per l'attributo externalId, i valori degli argomenti passati al metodo Query sono: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. Se la risposta a una query sul servizio Web per cercare un utente con valore dell'attributo externalId corrispondente al valore dell'attributo mailNickname di un utente non restituisce alcun utente, Azure Active Directory richiede che il servizio effettui il provisioning di un utente corrispondente a quello in 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 does not return any users, then Azure Active Directory requests that the service provision a user corresponding to the one in Azure Active Directory. Ecco un esempio di questa richiesta:Here is an example of such a request:

     POST https://.../scim/Users HTTP/1.1
     Authorization: Bearer ...
     Content-type: application/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}
    

    Le librerie Common Language Infrastructure fornite da Microsoft per implementare servizi SCIM convertiranno tale richiesta in una chiamata al metodo Create del provider del servizio.The Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services would translate that request into a call to the Create method of the service’s provider. Il metodo Create ha la firma seguente: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);
    

    In una richiesta di provisioning di un utente, il valore dell'argomento resource è un'istanza della classe Microsoft.SystemForCrossDomainIdentityManagement.In a request to provision a user, the value of the resource argument is an instance of the Microsoft.SystemForCrossDomainIdentityManagement. Core2EnterpriseUser, definita nella libreria Microsoft.SystemForCrossDomainIdentityManagement.Schemas.Core2EnterpriseUser class, defined in the Microsoft.SystemForCrossDomainIdentityManagement.Schemas library. Se la richiesta di provisioning dell'utente ha esito positivo, si prevede che l'implementazione del metodo restituisca un'istanza di 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. Core2EnterpriseUser, con il valore della proprietà Identifier impostato sull'identificatore univoco dell'utente appena sottoposto a provisioning.Core2EnterpriseUser class, with the value of the Identifier property set to the unique identifier of the newly provisioned user.

  3. Per aggiornare un utente la cui esistenza è nota in un archivio identità gestito da SCIM, Azure Active Directory richiede al servizio lo stato corrente dell'utente con una richiesta simile alla seguente: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 ...
    

    In un servizio creato mediante le librerie Common Language Infrastructure fornite da Microsoft per implementare i servizi SCIM, la richiesta viene convertita in una chiamata al metodo Retrieve del provider del servizio.In a service built using the Common Language Infrastructure libraries provided by Microsoft for implementing SCIM services, the request is translated into a call to the Retrieve method of the service’s provider. Ecco la firma del metodo 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; }
     }
    

    Nell'esempio di una richiesta per recuperare lo stato corrente di un utente, i valori delle proprietà dell'oggetto fornito come valore dell'argomento parameters sono analoghi ai seguenti: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:

    • Identifier: "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. Se è necessario aggiornare un attributo reference, Azure Active Directory esegue query sul servizio per determinare se il valore corrente dell'attributo reference nell'archivio identità gestito dal servizio corrisponde già al valore dell'attributo in Azure Active Directory.If a reference attribute is to be updated, then Azure Active Directory queries the service to determine whether or not 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. Per gli utenti, l'unico attributo il cui valore corrente viene sottoposto a query con questa modalità è l'attributo manager.For users, the only attribute of which the current value is queried in this way is the manager attribute. Ecco un esempio di una richiesta per determinare se l'attributo manager di un oggetto utente specifico ha attualmente un determinato valore:Here is an example of a request to determine whether the manager attribute of a particular user object currently has a certain value:

     GET ~/scim/Users?filter=id eq 54D382A4-2050-4C03-94D1-E769F1D15682 and manager eq 2819c223-7f76-453a-919d-413861904646&attributes=id HTTP/1.1
     Authorization: Bearer ...
    

    Il valore del parametro attributes della query, id, indica che se esiste un oggetto utente che soddisfa l'espressione fornita come valore del parametro filter della query, il servizio dovrà rispondere con una risorsa urn:ietf:params:scim:schemas:core:2.0:User o urn:ietf:params:scim:schemas:extension:enterprise:2.0:User che include solo il valore dell'attributo id della risorsa.The value of the attributes query parameter, id, signifies that if a user object exists that satisfies the expression provided as the value of the filter query parameter, then the service is expected to respond with a urn:ietf:params:scim:schemas:core:2.0:User or urn:ietf:params:scim:schemas:extension:enterprise:2.0:User resource, including only the value of that resource’s id attribute. Il valore dell'attributo id è noto al richiedente,The value of the id attribute is known to the requestor. poiché è incluso nel valore del parametro filter della query. Il valore viene chiesto per potere richiedere una rappresentazione minima di una risorsa che soddisfa l'espressione di filtro come indicazione dell'eventuale esistenza di questo oggetto.It is included in the value of the filter query parameter; the purpose of asking for it is actually to request a minimal representation of a resource that satisfying the filter expression as an indication of whether or not any such object exists.

    Se il servizio è stato creato mediante le librerie Common Language Infrastructure fornite da Microsoft per implementare i servizi SCIM, la richiesta viene convertita in una chiamata al metodo Query del provider del servizio.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. Il valore delle proprietà dell'oggetto fornito come valore dell'argomento parameters è analogo al seguente: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"

    Il valore dell'indice x può essere 0 e il valore dell'indice y può essere 1 oppure il valore di x può essere 1 e il valore di y può essere 0, in base all'ordine delle espressioni del parametro filter della query.Here, the value of the index x may be 0 and the value of the index y may be 1, or the value of x may be 1 and the value of y may be 0, depending on the order of the expressions of the filter query parameter.

  5. Ecco un esempio di una richiesta di Azure Active Directory a un servizio SCIM per l'aggiornamento di un utente: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/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"}]}]}
    

    Le librerie Microsoft Common Language Infrastructure per implementare servizi SCIM convertiranno la richiesta in una chiamata al metodo Update del provider del servizio.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. Questa è la firma del metodo 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; }
     }
    

    Nell'esempio di una richiesta per l'aggiornamento di un utente, i valori delle proprietà dell'oggetto fornito come valore dell'argomento patch sono analoghi ai seguenti: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
  6. Per effettuare il deprovisioning di un utente da un archivio identità gestito da un servizio SCIM, Azure Active Directory invia una richiesta simile alla seguente: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 ...
    

    Se il servizio è stato creato mediante le librerie Common Language Infrastructure fornite da Microsoft per implementare i servizi SCIM, la richiesta viene convertita in una chiamata al metodo Delete del provider del servizio.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. Il metodo ha la firma seguente: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);
    

    Nell'esempio di una richiesta per il deprovisioning di un utente, i valori delle proprietà dell'oggetto fornito come valore dell'argomento resourceIdentifier sono analoghi ai seguenti: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"

Provisioning e deprovisioning gruppiGroup provisioning and de-provisioning

La figura seguente illustra i messaggi che Azure AD invia al servizio SCIM per gestire il ciclo di vita di un gruppo in un altro archivio identità.The following illustration shows the messages that Azure AcD sends to a SCIM service to manage the lifecycle of a group in another identity store. Questi messaggi si differenziano dai messaggi relativi agli utenti in tre modi:Those messages differ from the messages pertaining to users in three ways:

  • Lo schema di una risorsa gruppo viene identificato come http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group.The schema of a group resource is identified as http://schemas.microsoft.com/2006/11/ResourceManagement/ADSCIM/Group.
  • Le richieste per il recupero di gruppi stipulano che l'attributo members deve essere escluso da qualsiasi risorsa fornita in risposta alla richiesta.Requests to retrieve groups stipulate that the members attribute is to be excluded from any resource provided in response to the request.
  • Le richieste per determinare se un attributo reference ha un determinato valore sono richieste relative all'attributo members.Requests to determine whether a reference attribute has a certain value are requests about the members attribute.

Figura 6: Sequenza di provisioning e deprovisioning gruppi Figure 6: Group provisioning and de-provisioning sequence