Distribuire criteri personalizzati con Azure PipelinesDeploy custom policies with Azure Pipelines

Usando una pipeline di integrazione e recapito continuo (CI/CD) impostata in Azure Pipelines, è possibile includere i criteri personalizzati di Azure AD B2C nella distribuzione del software e nell'automazione del controllo del codice.By using a continuous integration and delivery (CI/CD) pipeline that you set up in Azure Pipelines, you can include your Azure AD B2C custom policies in your software delivery and code control automation. Durante la distribuzione in ambienti di Azure AD B2C diversi, ad esempio sviluppo, test e produzione, è consigliabile rimuovere i processi manuali ed eseguire test automatizzati usando Azure Pipelines.As you deploy to different Azure AD B2C environments, for example dev, test, and production, we recommend that you remove manual processes and perform automated testing by using Azure Pipelines.

Sono necessari tre passaggi principali per abilitare Azure Pipelines gestire i criteri personalizzati all'interno Azure AD B2C:There are three primary steps required for enabling Azure Pipelines to manage custom policies within Azure AD B2C:

  1. Creare una registrazione dell'applicazione Web nel tenant Azure AD B2CCreate a web application registration in your Azure AD B2C tenant
  2. Configurare un repo di AzureConfigure an Azure Repo
  3. Configurare una pipeline di AzureConfigure an Azure Pipeline

Importante

La gestione Azure AD B2C criteri personalizzati con una pipeline di Azure usa attualmente le operazioni di anteprima disponibili nell'endpoint /beta Microsoft Graph'API.Managing Azure AD B2C custom policies with an Azure Pipeline currently uses preview operations available on the Microsoft Graph API /beta endpoint. L'uso di queste API nelle applicazioni di produzione non è supportato.Use of these APIs in production applications is not supported. Per altre informazioni, vedere le informazioni di riferimento Microsoft Graph endpoint beta dell'API REST.For more information, see the Microsoft Graph REST API beta endpoint reference.

PrerequisitiPrerequisites

Flusso di concessione di credenziali clientClient credentials grant flow

Lo scenario descritto qui usa le chiamate da servizio a servizio tra Azure Pipelines e Azure AD B2C usando il flusso di concessione delle credenziali clientOAuth 2.0.The scenario described here makes use of service-to-service calls between Azure Pipelines and Azure AD B2C by using the OAuth 2.0 client credentials grant flow. Questo flusso di concessione consente a un servizio Web come Azure Pipelines (client riservato) di usare le proprie credenziali invece di rappresentare un utente per l'autenticazione quando si chiama un altro servizio Web (in questo caso l'API Microsoft Graph).This grant flow permits a web service like Azure Pipelines (the confidential client) to use its own credentials instead of impersonating a user to authenticate when calling another web service (the Microsoft Graph API, in this case). Azure Pipelines ottiene un token in modo non interattivo, quindi effettua richieste all'API Microsoft Graph.Azure Pipelines obtains a token non-interactively, then makes requests to the Microsoft Graph API.

Registrare un'applicazione per le attività di gestioneRegister an application for management tasks

Come accennato in Prerequisiti,è necessaria una registrazione dell'applicazione che gli script di PowerShell, eseguiti da Azure Pipelines, possono usare per accedere alle risorse nel tenant.As mentioned in Prerequisites, you need an application registration that your PowerShell scripts--executed by Azure Pipelines--can use for accessing the resources in your tenant.

Se si ha già una registrazione dell'applicazione che si usa per le attività di automazione, assicurarsi che sia stata concessa l'autorizzazione > > policy.ReadWrite.TrustFramework di Microsoft Graph Policy.ReadWrite.TrustFramework nelle autorizzazioni API della registrazione dell'app.If you already have an application registration that you use for automation tasks, ensure it's been granted the Microsoft Graph > Policy > Policy.ReadWrite.TrustFramework permission within the API Permissions of the app registration.

Per istruzioni sulla registrazione di un'applicazione di gestione, vedere Gestire Azure AD B2C con Microsoft Graph.For instructions on registering a management application, see Manage Azure AD B2C with Microsoft Graph.

Configurare un riposino di AzureConfigure an Azure Repo

Con un'applicazione di gestione registrata, è possibile configurare un repository per i file dei criteri.With a management application registered, you're ready to configure a repository for your policy files.

  1. Accedere all'organizzazione Azure DevOps Services locale.Sign in to your Azure DevOps Services organization.

  2. Creare un nuovo progetto o selezionarne uno esistente.Create a new project or select an existing project.

  3. Nel progetto passare a Repository e selezionare la pagina File.In your project, navigate to Repos and select the Files page. Selezionare un repository esistente o crearne uno per questo esercizio.Select an existing repository or create one for this exercise.

  4. Creare una cartella denominata B2CAssets.Create a folder named B2CAssets. Assegnare al file segnaposto README.md il nome Commit del file.Name the required placeholder file README.md and Commit the file. È possibile rimuovere questo file in un secondo momento, se si desidera.You can remove this file later, if you like.

  5. Aggiungere i Azure AD B2C file di criteri alla cartella B2CAssets.Add your Azure AD B2C policy files to the B2CAssets folder. Sono inclusi TrustFrameworkBase.xml, TrustFrameWorkExtensions.xml, SignUpOrSignin.xml, ProfileEdit.xml, PasswordReset.xml e tutti gli altri criteri creati.This includes the TrustFrameworkBase.xml, TrustFrameWorkExtensions.xml, SignUpOrSignin.xml, ProfileEdit.xml, PasswordReset.xml, and any other policies you've created. Registrare il nome file di Azure AD B2C file di criteri da usare in un passaggio successivo (vengono usati come argomenti di script di PowerShell).Record the filename of each Azure AD B2C policy file for use in a later step (they're used as PowerShell script arguments).

  6. Creare una cartella denominata Scripts nella directory radice del repository e assegnare al file segnaposto il nome DeployToB2c.ps1.Create a folder named Scripts in the root directory of the repository, name the placeholder file DeployToB2c.ps1. Non eseguire il commit del file a questo punto, ma in un passaggio successivo.Don't commit the file at this point, you'll do so in a later step.

  7. Incollare lo script di PowerShell seguenteDeployToB2c.ps1 e quindi eseguire il commit del file.Paste the following PowerShell script into DeployToB2c.ps1, then Commit the file. Lo script acquisisce un token da Azure AD e chiama l'API Microsoft Graph per caricare i criteri all'interno della cartella B2CAssets nel tenant Azure AD B2C.The script acquires a token from Azure AD and calls the Microsoft Graph API to upload the policies within the B2CAssets folder to your Azure AD B2C tenant.

    [Cmdletbinding()]
    Param(
        [Parameter(Mandatory = $true)][string]$ClientID,
        [Parameter(Mandatory = $true)][string]$ClientSecret,
        [Parameter(Mandatory = $true)][string]$TenantId,
        [Parameter(Mandatory = $true)][string]$PolicyId,
        [Parameter(Mandatory = $true)][string]$PathToFile
    )
    
    try {
        $body = @{grant_type = "client_credentials"; scope = "https://graph.microsoft.com/.default"; client_id = $ClientID; client_secret = $ClientSecret }
    
        $response = Invoke-RestMethod -Uri https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token -Method Post -Body $body
        $token = $response.access_token
    
        $headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
        $headers.Add("Content-Type", 'application/xml')
        $headers.Add("Authorization", 'Bearer ' + $token)
    
        $graphuri = 'https://graph.microsoft.com/beta/trustframework/policies/' + $PolicyId + '/$value'
        $policycontent = Get-Content $PathToFile
        $response = Invoke-RestMethod -Uri $graphuri -Method Put -Body $policycontent -Headers $headers
    
        Write-Host "Policy" $PolicyId "uploaded successfully."
    }
    catch {
        Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
    
        $_
    
        $streamReader = [System.IO.StreamReader]::new($_.Exception.Response.GetResponseStream())
        $streamReader.BaseStream.Position = 0
        $streamReader.DiscardBufferedData()
        $errResp = $streamReader.ReadToEnd()
        $streamReader.Close()
    
        $ErrResp
    
        exit 1
    }
    
    exit 0
    

Configurare la pipeline di AzureConfigure your Azure pipeline

Con il repository inizializzato e popolato con i file di criteri personalizzati, si è pronti per configurare la pipeline di versione.With your repository initialized and populated with your custom policy files, you're ready to set up the release pipeline.

Creare una pipelineCreate pipeline

  1. Accedere all'organizzazione Azure DevOps Services e passare al progetto.Sign in to your Azure DevOps Services organization and navigate to your project.
  2. Nel progetto selezionare Pipelines > Releases New pipeline (Versioni pipeline > nuova pipeline).In your project, select Pipelines > Releases > New pipeline.
  3. In Selezionare un modello selezionare Processo vuoto.Under Select a template, select Empty job.
  4. Immettere un nome di fase, ad esempio DeployCustomPolicies, quindi chiudere il riquadro.Enter a Stage name, for example DeployCustomPolicies, then close the pane.
  5. Selezionare Aggiungi un artefatto e in Tipo di origine selezionare Repository di Azure.Select Add an artifact, and under Source type, select Azure Repository.
    1. Scegliere il repository di origine contenente la cartella Scripts popolata con lo script di PowerShell.Choose the source repository containing the Scripts folder that you populated with the PowerShell script.
    2. Scegliere un ramo predefinito.Choose a Default branch. Se è stato creato un nuovo repository nella sezione precedente, il ramo predefinito è master.If you created a new repository in the previous section, the default branch is master.
    3. Lasciare l'impostazione Versione predefinita di Più recente dal ramo predefinito.Leave the Default version setting of Latest from the default branch.
    4. Immettere un alias di origine per il repository.Enter a Source alias for the repository. Ad esempio, policyRepo.For example, policyRepo. Non includere spazi nel nome alias.Do not include any spaces in the alias name.
  6. Selezionare AggiungiSelect Add
  7. Rinominare la pipeline in modo che rifletta la finalità.Rename the pipeline to reflect its intent. Ad esempio, Distribuire una pipeline di criteri personalizzati.For example, Deploy Custom Policy Pipeline.
  8. Selezionare Salva per salvare la configurazione della pipeline.Select Save to save the pipeline configuration.

Configurare le variabili della pipelineConfigure pipeline variables

  1. Selezionare la scheda Variabili.Select the Variables tab.

  2. Aggiungere le variabili seguenti in Variabili pipeline e impostarne i valori come specificato:Add the following variables under Pipeline variables and set their values as specified:

    NomeName ValoreValue
    clientId ID applicazione (client) dell'applicazione registrata in precedenza.Application (client) ID of the application you registered earlier.
    clientSecret Valore del segreto client creato in precedenza.The value of the client secret that you created earlier.
    Modificare il tipo di variabile in segreto (selezionare l'icona a forma di lucchetto).Change the variable type to secret (select the lock icon).
    tenantId your-b2c-tenant.onmicrosoft.com, dove your-b2c-tenant è il nome del tenant Azure AD B2C tenant.your-b2c-tenant.onmicrosoft.com, where your-b2c-tenant is the name of your Azure AD B2C tenant.
  3. Selezionare Salva per salvare le variabili.Select Save to save the variables.

Aggiungere attività della pipelineAdd pipeline tasks

Aggiungere quindi un'attività per distribuire un file di criteri.Next, add a task to deploy a policy file.

  1. Selezionare la scheda Attività.Select the Tasks tab.

  2. Selezionare Processo di Agent e quindi selezionare il segno più ( ) per aggiungere + un'attività al processo di Agent.Select Agent job, and then select the plus sign (+) to add a task to the Agent job.

  3. Cercare e selezionare PowerShell.Search for and select PowerShell. Non selezionare "Azure PowerShell", "PowerShell nei computer di destinazione" o un'altra voce di PowerShell.Do not select "Azure PowerShell," "PowerShell on target machines," or another PowerShell entry.

  4. Selezionare l'attività Script di PowerShell appena aggiunta.Select newly added PowerShell Script task.

  5. Immettere i valori seguenti per l'attività Script di PowerShell:Enter following values for the PowerShell Script task:

    • Versione attività: 2.*Task version: 2.*

    • Nome visualizzato: nome dei criteri che l'attività deve caricare.Display name: The name of the policy that this task should upload. Ad esempio, B2C_1A_TrustFrameworkBase.For example, B2C_1A_TrustFrameworkBase.

    • Tipo: Percorso fileType: File Path

    • Percorso script: selezionare i puntini di sospensione (...* _), passare alla cartella _Scripts* e quindi selezionare il file DeployToB2C.ps1 file.Script Path: Select the ellipsis (...* _), navigate to the _Scripts* folder, and then select the DeployToB2C.ps1 file.

    • Argomenti:Arguments:

      Immettere i valori seguenti per Argomenti.Enter the following values for Arguments. Sostituire {alias-name} con l'alias specificato nella sezione precedente.Replace {alias-name} with the alias you specified in the previous section.

      # Before
      -ClientID $(clientId) -ClientSecret $(clientSecret) -TenantId $(tenantId) -PolicyId B2C_1A_TrustFrameworkBase -PathToFile $(System.DefaultWorkingDirectory)/{alias-name}/B2CAssets/TrustFrameworkBase.xml
      

      Ad esempio, se l'alias specificato è policyRepo, la riga dell'argomento deve essere:For example, if the alias you specified is policyRepo, the argument line should be:

      # After
      -ClientID $(clientId) -ClientSecret $(clientSecret) -TenantId $(tenantId) -PolicyId B2C_1A_TrustFrameworkBase -PathToFile $(System.DefaultWorkingDirectory)/policyRepo/B2CAssets/TrustFrameworkBase.xml
      
  6. Selezionare Salva per salvare il processo dell'agente.Select Save to save the Agent job.

L'attività appena aggiunta carica un file di criteri Azure AD B2C.The task you just added uploads one policy file to Azure AD B2C. Prima di procedere, attivare manualmente il processo (Crea versione) per assicurarsi che venga completato correttamente prima di creare attività aggiuntive.Before proceeding, manually trigger the job (Create release) to ensure that it completes successfully before creating additional tasks.

Se l'attività viene completata correttamente, aggiungere attività di distribuzione eseguendo i passaggi precedenti per ognuno dei file di criteri personalizzati.If the task completes successfully, add deployment tasks by performing the preceding steps for each of the custom policy files. Modificare i -PolicyId valori degli argomenti e per ogni -PathToFile criterio.Modify the -PolicyId and -PathToFile argument values for each policy.

è PolicyId un valore trovato all'inizio di un file di criteri XML all'interno del nodo TrustFrameworkPolicy.The PolicyId is a value found at the start of an XML policy file within the TrustFrameworkPolicy node. Ad esempio, nel codice XML dei criteri seguente PolicyId viene B2C_1A_TrustFrameworkBase : For example, the PolicyId in the following policy XML is B2C_1A_TrustFrameworkBase:

<TrustFrameworkPolicy
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
PolicySchemaVersion="0.3.0.0"
TenantId="contoso.onmicrosoft.com"
PolicyId= "B2C_1A_TrustFrameworkBase"
PublicPolicyUri="http://contoso.onmicrosoft.com/B2C_1A_TrustFrameworkBase">

Quando si eseguono gli agenti e si caricano i file dei criteri, assicurarsi che siano caricati nell'ordine seguente:When running the agents and uploading the policy files, ensure they're uploaded in this order:

  1. TrustFrameworkBase.xmlTrustFrameworkBase.xml
  2. TrustFrameworkExtensions.xmlTrustFrameworkExtensions.xml
  3. SignUpOrSignin.xmlSignUpOrSignin.xml
  4. ProfileEdit.xmlProfileEdit.xml
  5. PasswordReset.xmlPasswordReset.xml

Il Identity Experience Framework applica questo ordine poiché la struttura di file è compilata su una catena gerarchica.The Identity Experience Framework enforces this order as the file structure is built on a hierarchical chain.

Testare la pipelineTest your pipeline

Per testare la pipeline di versione:To test your release pipeline:

  1. Selezionare Pipeline e quindi Versioni.Select Pipelines and then Releases.
  2. Selezionare la pipeline creata in precedenza, ad esempio DeployCustomPolicies.Select the pipeline you created earlier, for example DeployCustomPolicies.
  3. Selezionare Crea versione e quindi Crea per accodare la versione.Select Create release, then select Create to queue the release.

Verrà visualizzato un banner di notifica che indica che una versione è stata accodata.You should see a notification banner that says that a release has been queued. Per visualizzarne lo stato, selezionare il collegamento nel banner di notifica o selezionarlo nell'elenco nella scheda Versioni.To view its status, select the link in the notification banner, or select it in the list on the Releases tab.

Passaggi successiviNext steps

Altre informazioni su:Learn more about: