Condividi tramite


Guida introduttiva: Chiamare un'API Web in un'app daemon di esempio

In questa guida introduttiva si usa un'applicazione daemon di esempio per acquisire un token di accesso e chiamare un'API Web protetta usando il Microsoft Authentication Library (MSAL).

Prima di iniziare, utilizzare il selettore Scegliere un tipo di tenant nella parte superiore di questa pagina per scegliere il tipo di tenant. Microsoft Entra ID offre due configurazioni tenant, dipendenti e esterni. Una configurazione tenant per la forza lavoro è rivolta ai dipendenti, alle app interne e ad altre risorse dell'organizzazione. Un tenant esterno è destinato alle app rivolte ai clienti.

L'app di esempio usata in questa guida introduttiva acquisisce un token di accesso per chiamare l'API Microsoft Graph.

Prerequisiti

Registrare l'applicazione e gli identificatori di record

Per completare la registrazione, specificare un nome dell'applicazione e specificare i tipi di account supportati. Dopo la registrazione, il riquadro Panoramica dell'applicazione visualizza gli identificatori necessari nel codice sorgente dell'applicazione.

  1. Accedi all'interfaccia di amministrazione di Microsoft Entra.

  2. Se si ha accesso a più tenant, usare l'icona impostazioni nel menu in alto per passare al tenant in cui si vuole registrare l'applicazione dal menu Directory + sottoscrizioni.

  3. Passare a Identity>Applications>Registrazioni app, quindi selezionare Nuova registrazione.

  4. Inserire un nome per l'applicazione, come ad esempio identity-client-daemon-app.

  5. Per Tipi di account supportati, selezionare Account in questa directory organizzativa solo. Per informazioni sui diversi tipi di account, selezionare l'opzione Aiutami a scegliere.

  6. Selezionare Registra.

    Screenshot che mostra come immettere un nome e selezionare il tipo di account nell'interfaccia di amministrazione di Microsoft Entra.

  7. Al termine della registrazione, viene visualizzato riquadro Panoramica dell'applicazione. Registrare l'ID Directory (tenant) , l'ID Applicazione (client) e l'ID Oggetto da usare nel codice sorgente dell'applicazione.

    Screenshot che mostra i valori dell'identificatore nella pagina panoramica del centro di amministrazione di Microsoft Entra.

    Nota

    I tipi di account supportati possono essere modificati facendo riferimento a Modificare gli account supportati da un'applicazione.

Creare un segreto di client

Creare un segreto client per l'applicazione registrata. L'applicazione usa il segreto client per dimostrare la propria identità quando richiede token:

  1. Nella pagina registrazioni dell'app selezionare l'applicazione creata ( ad esempio segreto client dell'app Web) per aprire la relativa pagina Panoramica.
  2. In Gestisci, selezionare Certificati & segreti>segreti di client>Nuovo segreto di client.
  3. Nella casella Descrizione immettere una descrizione per il segreto client, ad esempio segreto client dell'app Web).
  4. In Scadeselezionare una durata per cui il segreto è valido (in base alle regole di sicurezza dell'organizzazione) e quindi selezionare Aggiungi.
  5. Registra il valore del segreto. Questo valore viene usato per la configurazione in un passaggio successivo. Il valore del segreto non verrà più visualizzato e non sarà recuperabile in alcun modo, dopo che ti sposti dai Certificati e segreti. Assicurarsi di registrarlo.

Quando si creano le credenziali per un'applicazione client riservata:

  • Microsoft consiglia di usare un certificato anziché un segreto client prima di spostare l'applicazione in un ambiente di produzione. Per ulteriori informazioni su come utilizzare un certificato, consultare le istruzioni in credenziali del certificato di autenticazione dell'applicazione di Microsoft Identity Platform.

  • A scopo di test, è possibile creare un certificato autofirmato e configurare le app per l'autenticazione. Tuttavia, nell'ambiente di produzione, è meglio acquistare un certificato firmato da un'autorità di certificazione nota, quindi usare Azure Key Vault per gestire l'accesso e la durata dei certificati.

Concedere autorizzazioni API all'app daemon

Per consentire all'app daemon di accedere ai dati nell'API Microsoft Graph, concedere le autorizzazioni necessarie. L'app daemon richiede autorizzazioni per il tipo di applicazione. Gli utenti non possono interagire con un'applicazione daemon, quindi l'amministratore del tenant deve fornire il consenso a queste autorizzazioni. Usare la procedura seguente per concedere e fornire il consenso alle autorizzazioni:

Per l'app daemon .NET, non è necessario concedere o dare il consenso a nessuna autorizzazione. Questa app daemon legge le proprie informazioni di registrazione, in modo da poter funzionare senza concedere nessuna autorizzazione dell'applicazione.

Clonare o scaricare l'applicazione di esempio

Per ottenere l'applicazione di esempio, è possibile clonarla da GitHub o scaricarla come file .zip.

  • Per clonare l'esempio, aprire un prompt dei comandi e passare alla posizione in cui si vuole creare il progetto e immettere il comando seguente:
git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
  • Scarica il file .zip. Estrarlo in un percorso di file in cui la lunghezza del nome è inferiore a 260 caratteri.

Configurare il progetto

Per usare i dettagli di registrazione dell'app nell'esempio di app daemon client, seguire questa procedura:

  1. Aprire una finestra della console e quindi passare alla directory ms-identity-docs-code-dotnet/console-daemon:

    cd ms-identity-docs-code-dotnet/console-daemon
    
  2. Aprire Program.cs e sostituire il contenuto del file con il frammento di codice seguente;

     // Full directory URL, in the form of https://login.microsoftonline.com/<tenant_id>
     Authority = " https://login.microsoftonline.com/Enter_the_tenant_ID_obtained_from_the_Microsoft_Entra_admin_center",
     // 'Enter the client ID obtained from the Microsoft Entra admin center
     ClientId = "Enter the client ID obtained from the Microsoft Entra admin center",
     // Client secret 'Value' (not its ID) from 'Client secrets' in the Microsoft Entra admin center
     ClientSecret = "Enter the client secret value obtained from the Mifcrosoft Entra admin center",
     // Client 'Object ID' of app registration in Microsoft Entra admin center - this value is a GUID
     ClientObjectId = "Enter the client Object ID obtained from the Microsoft Entra admin center"
    
    • Authority: l'autorità è un URL che indica una directory da cui MSAL può richiedere token. Sostituire Enter_the_tenant_ID_obtained_from_the_Microsoft_Entra_admin_center con il valore dell'ID directory (tenant) registrato in precedenza.
    • ClientId: identificatore dell'applicazione, detto anche client. Sostituire il testo tra virgolette con il valore Application (client) ID registrato in precedenza dalla pagina di panoramica dell'applicazione registrata.
    • ClientSecret : segreto client creato per l'applicazione nell'interfaccia di amministrazione di Microsoft Entra. Immettere il valore del segreto client.
    • ClientObjectId : ID oggetto dell'applicazione client. Sostituire il testo tra virgolette con il valore Object ID registrato in precedenza dalla pagina di panoramica dell'applicazione registrata.

Eseguire e testare l'applicazione

Hai configurato la tua app di esempio. È possibile procedere con l'esecuzione e testarla.

Dalla finestra della console eseguire il comando seguente per compilare ed eseguire l'applicazione:

dotnet run

Al termine dell'esecuzione dell'applicazione, viene visualizzata una risposta simile al frammento di codice seguente (abbreviato per brevità):

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#applications/$entity",
"id": "00001111-aaaa-2222-bbbb-3333cccc4444",
"deletedDateTime": null,
"appId": "00001111-aaaa-2222-bbbb-3333cccc4444",
"applicationTemplateId": null,
"disabledByMicrosoftStatus": null,
"createdDateTime": "2021-01-17T15:30:55Z",
"displayName": "identity-dotnet-console-app",
"description": null,
"groupMembershipClaims": null,
...
}

Come funziona

Un'applicazione daemon acquisisce un token per conto di se stesso (non per conto di un utente). Gli utenti non possono interagire con un'applicazione daemon perché richiede la propria identità. Questo tipo di applicazione richiede un token di accesso usando l'identità dell'applicazione presentando l'ID applicazione, le credenziali (segreto o certificato) e un URI ID applicazione. L'applicazione daemon utilizza il flusso di concessione delle credenziali client standard OAuth 2.0 per acquisire un token di accesso.

L'app acquisisce un token di accesso da Microsoft Identity Platform. Il token di accesso ha come ambito l'API Microsoft Graph. L'app usa quindi il token di accesso per richiedere i dettagli di registrazione dell'applicazione dall'API Microsoft Graph. L'app può richiedere qualsiasi risorsa dall'API Microsoft Graph purché il token di accesso disponga delle autorizzazioni appropriate.

L'esempio illustra come un processo automatico o un servizio Windows può essere eseguito con un'identità dell'applicazione, anziché con l'identità di un utente.

Prerequisiti

Registrare le applicazioni e gli identificatori di record

In questo passaggio si registrano l'app daemon e l'app per le API Web nell'interfaccia di amministrazione di Microsoft Entra e si specificano gli ambiti dell'API Web.

Registrare un'applicazione API Web

  1. Accedi all'interfaccia di amministrazione di Microsoft Entra come almeno un Application Developer.

  2. Se si ha accesso a più tenant, utilizzare l'icona Impostazioni nel menu in alto per passare al tuo tenant esterno dal menu Directory + sottoscrizioni.

  3. Vai a Identity>Applications>Registrazione delle app.

  4. Selezionare + Nuova registrazione.

  5. Nella pagina Registrare un'applicazione visualizzata immettere le informazioni di registrazione dell'applicazione:

    1. Nella sezione Nome immettere un nome di applicazione significativo che verrà visualizzato agli utenti dell'app, ad esempio ciam-ToDoList-api.

    2. In Tipi di account supportati, selezionare Solo gli account in questa directory organizzativa.

  6. Selezionare Registra per creare l'applicazione.

  7. Il riquadro Panoramica dell'applicazione viene visualizzato quando la registrazione è completata. Registrare l'ID Directory (tenant) e l'ID applicazione (client) da usare nel codice sorgente dell'applicazione.

Configurare i ruoli dell'app

Un'API deve pubblicare almeno un ruolo dell'app per le applicazioni, detta anche autorizzazione dell'applicazione , affinché le app client ottengano un token di accesso a nome proprio. Le autorizzazioni dell'applicazione sono il tipo di autorizzazioni che le API devono pubblicare quando vogliono permettere alle applicazioni client di autenticarsi correttamente come entità indipendenti, senza che sia necessario l'accesso ai singoli utenti. Per pubblicare un'autorizzazione dell'applicazione, seguire questa procedura:

  1. Nella pagina registrazioni dell'app, selezionare l'applicazione che hai creato (ad esempio ciam-ToDoList-api) per aprire la relativa pagina Panoramica.

  2. In Gestisci, seleziona Ruoli dell'app.

  3. Selezionare Crea ruolo app, quindi immettere i valori seguenti e quindi selezionare Applica per salvare le modifiche:

    Proprietà Valore
    Nome visualizzato ToDoList.Leggi.Tutto
    Tipi di membri consentiti Applicazioni
    Valore ListaDaFare.Leggi.Tutto
    Descrizione Consentire all'app di leggere l'elenco ToDo di ogni utente utilizzando "la TodoListApi"
  4. Selezionare di nuovo Crea ruolo app, quindi immettere i valori seguenti per il secondo ruolo dell'app, quindi selezionare Applica per salvare le modifiche:

    Proprietà Valore
    Nome visualizzato ToDoList.ReadWrite.All
    Tipi di membri consentiti applicazioni
    Valore ToDoList.ReadWrite.All
    Descrizione Consentire all'app di leggere e scrivere la lista delle cose da fare di ogni utente usando il "ToDoListApi"

Configurare attestazioni facoltative

È possibile aggiungere l'idtyp dichiarazione facoltativa per aiutare l'API Web a determinare se un token è un token dell'app o un token app più utente. Sebbene sia possibile usare una combinazione di scp e ruoli e attestazioni per lo stesso scopo, l'uso dell'attestazione idtyp rappresenta il modo più semplice per distinguere tra un token dell'app e un token app + utente. Ad esempio, il valore di questa attestazione è app quando il token è un token solo per app.

Registrare l'app daemon

Per consentire all'applicazione di autenticare gli utenti con Microsoft Entra, Microsoft Entra External ID deve riconoscere l'applicazione che hai creato. La registrazione dell'app stabilisce una relazione di trust tra l'app e Microsoft Entra. Quando si registra un'applicazione, l'ID esterno genera un identificatore univoco noto come ID applicazione (client) , un valore usato per identificare l'app durante la creazione di richieste di autenticazione.

I passaggi seguenti illustrano come registrare l'app nell'interfaccia di amministrazione di Microsoft Entra:

  1. Accedi all'interfaccia di amministrazione di Microsoft Entra con almeno il ruolo di Application Developer.

  2. Se hai accesso a più tenant, usa l'icona Impostazioni nel menu in alto per passare al tenant esterno dal menu Directory + sottoscrizioni.

  3. Passare a Identità>Applicazioni>Registrazione app.

  4. Selezionare + Nuova registrazione.

  5. Nella pagina Registrare un'applicazione visualizzata;

    1. Immettere un Nome di applicazione significativo visualizzato dagli utenti dell'app, ad esempio ciam-client-app.
    2. In Tipi di account supportati, selezionare Accounts solo in questa directory organizzativa.
  6. Selezionare Registra.

  7. Il riquadro Panoramica dell'applicazione viene visualizzato dopo la registrazione avvenuta con successo. Registrare l'ID applicazione (client) da utilizzare nel codice sorgente dell'applicazione.

Creare un segreto del cliente

Creare un segreto client per l'applicazione registrata. L'applicazione usa il segreto client per dimostrare la propria identità quando richiede token:

  1. Nella pagina registrazioni dell'app selezionare l'applicazione creata ( ad esempio segreto client dell'app Web) per aprire la relativa pagina Panoramica.
  2. In Gestisci, selezionare Certificati & segreti>Segreti client>Nuovo segreto client.
  3. Nella casella Descrizione, immettere una descrizione per il segreto client (ad esempio, il segreto client dell'app Web ).
  4. In Scadeselezionare una durata di validità del segreto (in base alle regole di sicurezza dell'organizzazione) e poi selezionare Aggiungi.
  5. Registrare il valore del segreto. Questo valore viene usato per la configurazione in un passaggio successivo. Il valore del segreto non verrà visualizzato di nuovo e non sarà possibile recuperarlo in alcun modo, dopo aver lasciato la Certificati e segreti. Assicurarsi di registrarlo.

Quando si creano le credenziali per un'applicazione client riservata:

  • Microsoft consiglia di usare un certificato anziché un segreto client prima di spostare l'applicazione in un ambiente di produzione. Per altre informazioni su come usare un certificato, vedere le istruzioni in credenziali del certificato di autenticazione delle applicazioni di Microsoft Identity Platform.

  • A scopo di test, è possibile creare un certificato autofirmato e configurare le app per l'autenticazione. Tuttavia, nell'ambiente di produzioneè consigliabile acquistare un certificato firmato da un'autorità di certificazione nota, quindi usare Azure Key Vault per gestire l'accesso e la durata dei certificati.

Concedere autorizzazioni API all'app daemon

  1. Nella pagina registrazioni dell'app selezionare l'applicazione creata, ad esempio ciam-client-app.

  2. In Gestisci, seleziona autorizzazioni API.

  3. In Autorizzazioni configurate, selezionare Aggiungere un'autorizzazione.

  4. Selezionare la scheda delle API utilizzate dalla mia organizzazione.

  5. Nell'elenco delle API selezionare l'API, ad esempio ciam-ToDoList-api.

  6. Seleziona l'opzione Autorizzazioni applicazione. Selezioniamo questa opzione poiché l'app esegue l'accesso in proprio nome, ma non per conto di un utente.

  7. Nell'elenco delle autorizzazioni selezionare TodoList.Read.All, ToDoList.ReadWrite.All (usare la casella di ricerca, se necessario).

  8. Selezionare il pulsante Aggiungi autorizzazioni.

  9. A questo punto, le autorizzazioni sono state assegnate correttamente. Tuttavia, poiché l'app daemon non consente agli utenti di interagire con essa, gli utenti stessi non possono fornire il consenso a queste autorizzazioni. Per risolvere questo problema, l'amministratore deve fornire il consenso a queste autorizzazioni per conto di tutti gli utenti nel tenant:

    1. Selezionare Concedi il consenso dell'amministratore per <nome tenant>e quindi selezionare .
    2. Selezionare Aggiorna, quindi verificare che Concesso per <>il nome del tenant sia visualizzato sotto Stato per entrambe le autorizzazioni.

Clonare o scaricare l'applicazione demone di esempio e l'API web

Per ottenere l'applicazione di esempio, è possibile clonarla da GitHub o scaricarla come file .zip.

  • Per clonare l'esempio, aprire un prompt dei comandi e passare alla posizione in cui si vuole creare il progetto e immettere il comando seguente:

    git clone https://github.com/Azure-Samples/ms-identity-ciam-javascript-tutorial.git
    
  • In alternativa, scaricare gli esempi di file .zip, quindi estrarlo in un percorso del file in cui la lunghezza del nome è inferiore a 260 caratteri.

Installare le dipendenze del progetto

  1. Aprire una finestra della console e passare alla directory che contiene l'app di esempio Node.js:

    cd 2-Authorization\3-call-api-node-daemon\App
    
  2. Eseguire i comandi seguenti per installare le dipendenze dell'app:

    npm install && npm update
    

Configurare l'app e l'API del daemon di esempio

Per usare i dettagli di registrazione dell'app nell'esempio di app Web client, seguire questa procedura:

  1. Nell'editor di codice aprire App\authConfig.js file.

  2. Trova il segnaposto:

    • Enter_the_Application_Id_Here e sostituirlo con l'ID applicazione (client) dell'app daemon registrata in precedenza.

    • Enter_the_Tenant_Subdomain_Here e sostituirlo con il sottodominio Directory (tenant). Ad esempio, se il dominio primario del tenant è contoso.onmicrosoft.com, usare contoso. Se non hai il nome del tenant, scopri come leggere i dettagli del tenant.

    • Enter_the_Client_Secret_Here e sostituiscilo con il valore del segreto dell'applicazione daemon copiato in precedenza.

    • Enter_the_Web_Api_Application_Id_Here e sostituirlo con l'ID applicazione (client) dell'API Web copiata in precedenza.

Per usare la registrazione dell'app nell'esempio di API Web:

  1. Nell'editor di codice aprire API\ToDoListAPI\appsettings.json file.

  2. Trova il segnaposto:

    • Enter_the_Application_Id_Here e sostituirlo con l'ID applicazione (client) dell'API Web copiata.

    • Enter_the_Tenant_Id_Here e sostituirlo con l'ID directory (tenant) copiato in precedenza.

    • Enter_the_Tenant_Subdomain_Here e sostituirlo con il sottodominio Directory (tenant). Ad esempio, se il dominio primario del tenant è contoso.onmicrosoft.com, usare contoso. Se non hai il nome del locatario, scopri come leggere i dettagli del locatario.

Eseguire e testare l'app daemon di esempio e l'API

Hai configurato la tua app di esempio. È possibile procedere con l'esecuzione e testarla.

  1. Aprire una finestra della console, quindi eseguire l'API Web usando i comandi seguenti:

    cd 2-Authorization\3-call-api-node-daemon\API\ToDoListAPI
    dotnet run
    
  2. Eseguire il client dell'app Web usando i comandi seguenti:

    2-Authorization\3-call-api-node-daemon\App
    node . --op getToDos
    

Se l'app daemon e l'API Web vengono eseguite correttamente, nella finestra della console dovrebbe essere visualizzato un aspetto simile alla matrice JSON seguente.

{
    "id": 1,
    "owner": "3e8....-db63-43a2-a767-5d7db...",
    "description": "Pick up grocery"
},
{
    "id": 2,
    "owner": "c3cc....-c4ec-4531-a197-cb919ed.....",
    "description": "Finish invoice report"
},
{
    "id": 3,
    "owner": "a35e....-3b8a-4632-8c4f-ffb840d.....",
    "description": "Water plants"
}

Come funziona

L'app Node.js usa il flusso di concessione delle credenziali client OAuth 2.0 per acquisire un token di accesso per se stesso e non per l'utente. Il token di accesso che l'app richiede contiene le autorizzazioni rappresentate come ruoli. Il flusso delle credenziali client usa questo set di autorizzazioni al posto degli ambiti utente per i token dell'applicazione. Hai esposto queste autorizzazioni dell'applicazione nell'API web in precedenza, poi le hai concesse all'applicazione daemon.

Sul lato API, un'API Web .NET di esempio, l'API deve verificare che il token di accesso disponga delle autorizzazioni necessarie (autorizzazioni dell'applicazione). L'API Web non può accettare un token di accesso che non dispone delle autorizzazioni necessarie.

Accesso ai dati

Un endpoint API Web deve essere preparato per accettare chiamate da utenti e applicazioni. Pertanto, deve avere un modo per rispondere a ogni richiesta di conseguenza. Ad esempio, una chiamata effettuata da un utente tramite autorizzazioni delegate/ambiti riceve l'elenco dei dati to-do dell'utente. D'altra parte, una chiamata da un'applicazione tramite autorizzazioni/ruoli dell'applicazione può ricevere l'intero elenco di to-do. Tuttavia, in questo articolo viene eseguita solo una chiamata all'applicazione, quindi non è necessario configurare autorizzazioni/ambiti delegati.