Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come connettere un'app del servizio app di Azure a un database SQL di Azure back-end rappresentando l'utente connesso, detto anche flusso on-behalf-of. Per configurare questo flusso, abilitare l'autenticazione predefinita del servizio app usando il provider di identità Microsoft Entra.
Questo metodo di connettività è più avanzato rispetto all'approccio basato sull'identità gestita in Esercitazione: Accedere ai dati con identità gestita e presenta i vantaggi seguenti negli scenari aziendali:
- Elimina i segreti di connessione ai servizi back-end, così come l'approccio basato sull'identità gestita.
- Fornisce al database back-end o ad altri servizi di Azure un maggiore controllo sulla quantità di accesso da concedere a chi.
- Consente all'app di adattare la presentazione dei dati all'utente connesso.
In questa esercitazione si aggiunge l'autenticazione Di Microsoft Entra a un'app Web .NET con un back-end del database SQL di Azure. Scopri come:
- Abilitare l'autenticazione di Microsoft Entra per il database SQL di Azure.
- Disabilitare altre opzioni di autenticazione del database SQL.
- Aggiungere l'ID Microsoft Entra come provider di identità per l'app.
- Configurare l'autorizzazione di rappresentazione utente del database SQL.
- Configurare il servizio app per fornire un token di accesso utilizzabile per il database SQL.
- Accedere al database SQL di Azure per conto dell'utente connesso a Microsoft Entra.
Al termine dell'esercitazione, l'app si connette in modo sicuro al database SQL per conto dell'utente connesso.
Nota
- Microsoft Entra ID non è supportato per SQL Server locale.
- L'autenticazione di Microsoft Entra è diversa dall'autenticazione integrata di Windows in Active Directory (AD) Domain Services (DS) locale. Active Directory Domain Services e Microsoft Entra ID usano protocolli di autenticazione completamente diversi. Per altre informazioni, vedere la documentazione di Microsoft Entra Domain Services.
Prerequisiti
Avere accesso a un tenant di Microsoft Entra popolato con utenti e gruppi.
Completare l'esercitazione in Esercitazione: Creare un'app di database ASP.NET Core e SQL nel servizio app di Azure e usare l'app completata per questa esercitazione.
In alternativa, adattare i passaggi e usare la propria app .NET con il database SQL. I passaggi di questa esercitazione supportano le versioni .NET seguenti:
- .NET Framework 4.8 e versioni successive
- .NET 6.0 e versioni successive
Accedere ad Azure Cloud Shell o preparare l'ambiente per l'uso dell'interfaccia della riga di comando di Azure.
È possibile utilizzare l'ambiente Bash in Azure Cloud Shell. Per altre informazioni, vedere Introduzione ad Azure Cloud Shell.
Se preferisci eseguire localmente i comandi di riferimento della CLI, installa l'Azure CLI. Per l'esecuzione in Windows o macOS, è consigliabile eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker. Per altre informazioni, vedere Come eseguire l'interfaccia della riga di comando di Azure in un contenitore Docker.
Se usi un'installazione locale, accedi all'interfaccia della riga di comando di Azure usando il comando az login. Per completare il processo di autenticazione, seguire la procedura visualizzata nel terminale. Per altre opzioni di accesso, vedere Eseguire l'autenticazione ad Azure con l'interfaccia della riga di comando di Azure.
Quando ti viene richiesto, installa l'estensione Azure CLI al primo utilizzo. Per altre informazioni sulle estensioni, vedere Usare e gestire le estensioni con l'interfaccia della riga di comando di Azure.
Esegui az version per trovare la versione e le librerie dipendenti installate. Per eseguire l'aggiornamento alla versione più recente, avviare az upgrade.
1. Configurare il server di database con l'autenticazione di Microsoft Entra
Abilitare l'autenticazione di Microsoft Entra nel database SQL di Azure assegnando un utente Microsoft Entra come amministratore del server SQL di Azure. L'amministratore di Microsoft Entra deve essere un utente che viene creato, importato, sincronizzato o invitato in Microsoft Entra ID. L'utente di Microsoft Entra potrebbe non corrispondere all'utente dell'account Microsoft per la sottoscrizione di Azure.
Per aggiungere l'utente microsoft Entra ID come amministratore del server SQL di Azure, eseguire i comandi seguenti dell'interfaccia della riga di comando di Azure.
Usare
az ad user listcon ildisplay-nameparametro ,filteroupnper ottenere l'ID oggetto per l'utente di Microsoft Entra ID che si vuole rendere amministratore. Ad esempio, il comando seguente elenca le informazioni per un utente di Microsoft Entra ID con nomedisplay-namecognome.az ad user list --display-name "Firstname Lastname"Copiare il
idvalore dall'output da usare nel passaggio successivo.Suggerimento
È possibile eseguire
az ad user listautonomo per visualizzare informazioni per tutti gli utenti nella directory Microsoft Entra.Aggiungere l'utente microsoft Entra ID come amministratore nel server SQL di Azure usando
az sql server ad-admin createcon ilobject-idparametro . Nel comando seguente sostituire<group-name>con il nome del gruppo di risorse del server,<server-name>con il nome del server meno il.database.windows.netsuffisso e<entra-id>con l'outputiddel comando precedenteaz ad user list.az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>Limitare l'autenticazione del server di database solo all'autenticazione Microsoft Entra. Questo passaggio disabilita l'autenticazione con nome utente e password SQL.
az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
- Per altre informazioni sulla creazione di un utente di Microsoft Entra, vedere Aggiungere o eliminare utenti tramite Microsoft Entra ID.
- Per altre informazioni sugli utenti di Microsoft Entra consentiti per il database SQL, vedere Funzionalità e limitazioni di Microsoft Entra nel database SQL.
- Per altre informazioni sull'aggiunta di un amministratore di SQL Server di Azure, vedere Effettuare il provisioning di un amministratore di Microsoft Entra per il server.
2. Abilitare l'autenticazione di Microsoft Entra ID per l'app
Aggiungere l'ID Microsoft Entra come provider di identità per l'app. Per altre informazioni, vedere Configurare l'autenticazione di Microsoft Entra per un'applicazione dei servizi app.
Nella pagina del portale di Azure per l'app selezionare Autenticazione in Impostazioni nel menu di spostamento a sinistra.
Nella pagina Autenticazione selezionare Aggiungi provider di identità o selezionare Aggiungi provider nella sezione Provider di identità .
Nella pagina Aggiungi provider di identità selezionare Microsoft come provider.
Per Scadenza segreto client selezionare una delle opzioni dell'elenco a discesa, ad esempio Consigliato: 180 giorni.
Mantenere tutte le impostazioni predefinite e selezionare Aggiungi.
Nota
Se si riconfigurano le impostazioni di autenticazione dell'app, i token nell'archivio token potrebbero non rigenerarsi dalle nuove impostazioni. Per assicurarsi che i token vengano rigenerati, disconnettersi e accedere di nuovo all'app. Un metodo semplice consiste nell'usare il browser in modalità privata. Chiudere e riaprire il browser in modalità privata dopo aver modificato le impostazioni nelle app.
3. Configurare la rappresentazione dell'utente del database SQL
Concedere all'app le autorizzazioni per accedere al database SQL per conto dell'utente connesso a Microsoft Entra.
Nella pagina Autenticazione dell'app selezionare il nome dell'app in Provider di identità.
Verrà visualizzata la pagina di registrazione dell'app. Questa registrazione è stata generata automaticamente quando è stato aggiunto il provider Microsoft Entra.
Selezionare Autorizzazioni API in Gestisci nel menu di spostamento a sinistra.
Nella pagina Autorizzazioni API selezionare Aggiungi un'autorizzazione.
Nella schermata Richiedi autorizzazioni API selezionare la scheda API usate dall'organizzazione .
Immettere il database SQL di Azure nella casella di ricerca e selezionare il risultato.
In Tipo di autorizzazioni necessarie per l'applicazione selezionare Autorizzazioni delegate, quindi selezionare la casella di controllo accanto a user_impersonation e quindi selezionare Aggiungi autorizzazioni.
La registrazione dell'app in Microsoft Entra dispone ora delle autorizzazioni necessarie per connettersi al database SQL rappresentando l'utente connesso.
4. Configurare il servizio app per la restituzione di un token di accesso utilizzabile
Per configurare l'app in modo da fornire un token di accesso utilizzabile per il database SQL, aggiungere https://database.windows.net/user_impersonation come a scope al provider loginParametersMicrosoft Entra dell'app. Il comando seguente aggiunge la loginParameters proprietà con ambiti personalizzati alle impostazioni del provider di login identità Microsoft Entra.
Degli ambiti richiesti, il servizio app richiede openidgià gli ambiti , profilee email per impostazione predefinita. L'ambito offline_access è incluso in modo da poter aggiornare i token. Per altre informazioni, vedere Ambiti openID Connect.
L'ambito https://database.windows.net/user_impersonation fa riferimento al database SQL di Azure e fornisce un token JSON Web (JWT) che specifica il database SQL come destinatario del token. Questo comando usa jq per l'elaborazione JSON, già installata in Cloud Shell.
authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"
Suggerimento
Per configurare l'ambito necessario usando un'interfaccia Web anziché l'interfaccia della riga di comando di Azure, usare Configurare il provider Microsoft Entra per fornire i token di aggiornamento, aggiungendo https://database.windows.net/user_impersonation agli ambiti richiesti.
L'app è ora configurata per generare un token di accesso accettato dal database SQL.
Nota
I token di accesso scadono dopo un certo periodo di tempo. Per informazioni su come aggiornare i token di accesso senza richiedere agli utenti di ripetere l'autenticazione con l'app, vedere Aggiornare i token di autenticazione.
5. Usare il token di accesso nel codice dell'applicazione
Aggiornare il codice dell'applicazione per aggiungere il token di accesso fornito dall'autenticazione del servizio app all'oggetto connessione.
Nota
Questo codice non funziona in locale. Per altre informazioni e alternative per il debug locale, vedere Eseguire il debug in locale quando si usa l'autenticazione del servizio app.
DbContextNell'oggetto in DatabaseContext.cs o in un altro file che configura il contesto del database, modificare il costruttore predefinito per aggiungere il token di accesso DELL'ID Entra Microsoft all'oggetto connessione.public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor) : base(options) { var conn = Database.GetDbConnection() as SqlConnection; conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"]; }Se nel servizio app è presente una stringa di connessione denominata
defaultConnectionche usa l'autenticazione SQL con nome utente e password, usare il comando seguente per rimuovere i segreti di connessione. Sostituire<group-name>,<app-name>,<db-server-name>e<db-name>con i valori.az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
6. Pubblicare le modifiche
Se nel browser è stato usato Visual Studio Code per apportare modifiche al codice nel fork di GitHub, selezionare Controllo del codice sorgente dal menu a sinistra. Immettere un messaggio di commit come OBO connect e selezionare Commit.
Il commit attiva una distribuzione di GitHub Actions nel Servizio app. Attendere qualche minuto per il completamento della distribuzione.
È anche possibile pubblicare le modifiche in Git Bash usando i comandi seguenti:
git commit -am "configure managed identity"
git push azure main
Se il codice si trova in Visual Studio:
Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e scegliere Pubblica.
Nella pagina Pubblica selezionare Pubblica.
Quando la nuova pagina dell'app mostra l'app, l'app si connette al database SQL di Azure per conto dell'utente connesso a Microsoft Entra. Dovresti essere in grado di usare e modificare la tua app come di consueto.
7. Pulire le risorse
Nei passaggi precedenti sono state create risorse di Azure in un gruppo di risorse. Quando queste risorse non sono più necessarie, eliminare il gruppo di risorse eseguendo il comando seguente:
az group delete --name <group-name>
L'esecuzione di questo comando potrebbe richiedere del tempo.
Domande frequenti
- Perché viene visualizzato un errore "Accesso non riuscito per l'utente "<entità> identificata da token"?
- Come si aggiungono altri utenti o gruppi di Microsoft Entra nel database SQL di Azure?
- Come si esegue il debug in locale quando si usa l'autenticazione del Servizio app?
- Cosa accade quando scadono i token di accesso?
Perché viene visualizzato un errore "Accesso non riuscito per l'utente "<entità> identificata da token"?
Le cause più comuni di un Login failed for user '<token-identified principal>' errore sono:
- Autenticazione Di Microsoft Entra non configurata per il database SQL di Azure. Vedere Configurare il server di database con l'autenticazione di Microsoft Entra.
- Nessun token valido nell'intestazione della
X-MS-TOKEN-AAD-ACCESS-TOKENrichiesta. Questo codice non funziona negli ambienti locali. Per altre informazioni e alternative, vedere Eseguire il debug in locale quando si usa l'autenticazione del servizio app. - L'utente non dispone dell'autorizzazione per connettersi al database. Per aggiungere utenti e autorizzazioni, vedere Aggiungere altri utenti o gruppi di Microsoft Entra nel database SQL di Azure.
Come si aggiungono altri utenti o gruppi di Microsoft Entra nel database SQL di Azure?
Per aggiungere altri utenti o gruppi, connettersi al server di database usando sqlcmd o SQL Server Management Studio (SSMS) e creare utenti di database indipendenti mappati alle identità di Microsoft Entra.
L'esempio di Transact-SQL seguente aggiunge un'identità Microsoft Entra a SQL Server e assegna all'identità alcuni ruoli del database:
CREATE USER [<user-or-group-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_datawriter ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<user-or-group-name>];
GO
Come si esegue il debug in locale quando si usa l'autenticazione del Servizio app?
Poiché l'autenticazione del servizio app è una funzionalità di Azure, il codice di questa esercitazione non funziona nell'ambiente locale. A differenza di un'app in esecuzione in Azure, il codice locale non trae vantaggio dal middleware di autenticazione del servizio app. Per il debug locale è possibile usare le alternative seguenti:
- Connettersi al database SQL dall'ambiente locale con
Active Directory Interactivel'autenticazione. Questo flusso di autenticazione non accede all'utente stesso, ma si connette al database back-end con l'utente connesso in modo da poter testare l'autorizzazione del database in locale. - Copiare manualmente il token di accesso nel codice al posto dell'intestazione della
X-MS-TOKEN-AAD-ACCESS-TOKENrichiesta. - Se si esegue la distribuzione da Visual Studio, usare il debug remoto dell'app del Servizio app.
Cosa accade quando scadono i token di accesso?
Il token di accesso scade dopo un certo periodo di tempo. Per informazioni su come aggiornare i token di accesso senza chiedere agli utenti di autenticarsi di nuovo nell'app, vedere Refresh identity provider tokens (Aggiornare i token del provider di identità).
Contenuti correlati
- Esercitazione: Connettersi ai database di Azure da Servizio app senza segreti usando un'identità gestita
- Esercitazione: Accedere a Microsoft Graph da un'app protetta come app
- Esercitazione: Isolare le comunicazioni back-end con l'integrazione della rete virtuale
- Eseguire il mapping di un nome DNS personalizzato esistente al Servizio app di Azure