Le Managed Identity dei Azure permettono di fare la stessa cosa che si faceva onprem con l'autenticazione integrata.
Ovvero permettono di accedere da un Azure App Services a Azure SQL databases senza dover specificare, in modo esplicito, le credenziali nella connection string.

App Services

L'abilitazione della Managed identity in un Azure App Services avviene accedendo al menù Settings / Identity / System assigned
Managed identityManaged identity
selezionare On, poi Save e Yes
AbilitazioneAbilitazione
attendere qualche secondo per l'abilitazione
AbilitatoAbilitato
Lato Azure App Services la configurazione è finita.

SQL database

Il passo successivo è andare sul Azure SQL databases ed eseguire il T-SQL di abilitazione sul Database per concedere alla nuova identity i permessi di accesso.
descriptiondescription

Collegarsi con SQL Server Management Studio al database ed aggiungere la managed identity
T-SQL: Creazione utente
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
poi dare i permessi di accesso
T-SQL: Aggiunta permessi
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
--ALTER ROLE db_owner ADD MEMBER [<identity-name>];
GO

Identity name

L'identity name è la parte dell'host nel fullname dell'app service <identity-name>.azurewebsites.net.

Nel caso di una Azure App Services chiamato app-sgart-temp.azurewebsites.net l'identity name sarà app-sgart-temp.

Quindi l'istruzione T-SQL diventano
T-SQL: Creazione utente e permessi
CREATE USER [app-sgart-temp] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [app-sgart-temp];
ALTER ROLE db_datawriter ADD MEMBER [app-sgart-temp];
GO

Ne caso di uso dei deployment slot, ogni slot avrà la sua identity univoca che sarà nella forma
Text: Identity for slot
<app-name>/slots/<slot-name>
ad esempio
T-SQL: Creazione utente e permessi con slot
CREATE USER [app-sgart-temp/slot/prod] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [app-sgart-temp/slot/prod];
ALTER ROLE db_datawriter ADD MEMBER [app-sgart-temp/slot/prod];
GO

Store Procedure

Nel caso delle store procedure T-SQL, i permessi db_datareader e db_datawriter non sono sufficienti.

In questo caso si può dare il permesso di esecuzione ad ogni singola store (poco pratico), oppure a livello di schema
T-SQL
GRANT EXECUTE ON SCHEMA::<schema name>
    TO [<identity-name>];  
Se si usano solo store procedure per accedere al database non servono altri permessi oltre a quello di execute.

.NET Code

A questo punto, nel progetto .NET, è sufficiente modificare la connection string a Azure SQL databases in questo modo:
JSON: Connection string managed identity
"Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
Da notare la presenza di Authentication=Active Directory Default.
Richiede il package NuGet Microsoft.Data.SqlClient.

Vedi anche Tutorial: Connect to SQL Database from .NET App Service without secrets using a managed identity.
Potrebbe interessarti anche: