Dela via


Självstudie: Använda hanterad identitet för att ansluta en Azure-webbapp till en Azure SQL-databas utan hemligheter

Azure App Service tillhandahåller en mycket skalbar och självuppdaterande webbhotellstjänst i Azure. App Service tillhandahåller även en hanterad identitet för din app, vilket är en nyckelfärdig lösning för att skydda åtkomsten till Azure SQL och andra Azure-tjänster. Hanterade identiteter i App Service gör din app säkrare genom att eliminera hemligheter, till exempel autentiseringsuppgifter i anslutningssträngar.

Den här handledningen visar hur du lägger till hanterad identitet i en .NET-exempelapp som har en Azure SQL-backend. När du är klar kan din app ansluta till Azure SQL-databasen på ett säkert sätt utan att behöva ett användarnamn och lösenord.

Arkitekturdiagram för handledningsscenario.

I den här handledningen kommer du att:

  • Aktivera hanterade identiteter.
  • Ge Azure SQL Database åtkomst till den hanterade identiteten.
  • Konfigurera Entity Framework för att använda Microsoft Entra-autentisering med SQL Database.
  • Anslut till SQL Database från Visual Studio med Microsoft Entra-autentisering.

Vägledning om hur du använder Azure Database for MySQL eller Azure Database for PostgreSQL i ramverken Node.js, Python och Java finns i Självstudie: Ansluta till Azure-databaser från App Service utan hemligheter med hjälp av en hanterad identitet.

Kommentar

  • Microsoft Entra-ID och hanterade identiteter stöds inte för lokal SQL Server.

  • Microsoft Entra-autentisering skiljer sig från integrerad Windows-autentisering i lokala Active Directory (AD) Domain Services (DS). AD DS och Microsoft Entra ID använder helt olika autentiseringsprotokoll. Mer information finns i Dokumentation om Microsoft Entra Domain Services.

Förutsättningar

Bevilja databasadministratör åtkomst till en Microsoft Entra-användare

Aktivera Microsoft Entra-autentisering till Azure SQL-databasen genom att tilldela en Microsoft Entra-användare som administratör för Azure SQL-servern. Microsoft Entra-administratören måste vara en användare som skapas, importeras, synkroniseras eller bjuds in till Microsoft Entra-ID. Den här användaren kanske inte är samma som Microsoft-kontoanvändaren för din Azure-prenumeration.

Kör följande kommandon i Bash-miljön i Azure Cloud Shell eller när du har loggat in på Azure CLI lokalt.

  1. Använd az ad user list med parametern display-name, filtereller upn för att hämta objekt-ID:t för den Microsoft Entra-ID-användare som du vill göra till administratör. Kör az ad user list fristående om du vill visa information för alla användare i Microsoft Entra-katalogen.

    Följande kommando visar till exempel information för en Microsoft Entra-ID-användare med display-name förnamn efternamn.

    az ad user list --display-name "Firstname Lastname"
    

    Här är exempel på utdata:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. Lägg till Microsoft Entra ID-användaren som administratör på Azure SQL-servern genom att använda az sql server ad-admin create med parametern object-id. I följande kommando ersätter du <server-name> med servernamnet minus suffixet .database.windows.net och <entra-id> med id värdet från utdata från föregående az ad user list kommando.

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    

Konfigurera hanterad identitetsanslutning för appen

Följande steg konfigurerar din app för att ansluta till Azure SQL Database med hjälp av en systemtilldelad hanterad identitet. Information om hur du använder en användartilldelad identitet finns i Självstudie: Ansluta till Azure-databaser från App Service utan hemligheter med hjälp av en hanterad identitet.

Aktivera hanterad identitet för appen

Om du vill aktivera en hanterad identitet för din Azure-app använder du kommandot az webapp identity assign och ersätter <app-name> med ditt appnamn. Namnet på en systemtilldelad identitet är alltid samma som appnamnet.

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Här är ett exempel på utdata:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Om du vill aktivera hanterad identitet för ett distributionsfack lägger du till --slot <slot-name> i föregående kommando och använder namnet på platsen i <slot-name>. Namnet på en systemtilldelad identitet för ett distributionsfack är <app-name>/slots/<slot-name>.

Du kan också lägga till identiteten i en Microsoft Entra-grupp och sedan ge SQL Database åtkomst till Microsoft Entra-gruppen i stället för till identiteten. Om du vill bevilja behörigheter för en Microsoft Entra-grupp använder du gruppens visningsnamn. Följande kommandon lägger till den exemplariska hanterade identiteten i en ny grupp kallad myAzureSQLDBAccessGroup.

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Bevilja behörigheter till den hanterade identiteten

Ge identiteten de minsta behörigheter som din app behöver.

  1. Öppna en PowerShell-kommandorad och logga in på SQL Database med hjälp av följande SQLCMD-kommando. Ersätt <server-name> med servernamnet, <db-name> med databasnamnet och <admin-user> med userPrincipalName administratörsanvändarens från utdata från föregående az ad user list kommando.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Följ anvisningarna för att logga in.

  2. Kör följande kommandon i SQL-prompten för att ge appen de minsta behörigheter som krävs för databasen. Ersätt <identity-name> med namnet på den hanterade identiteten i Microsoft Entra-ID, som är samma som appnamnet.

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

Kommentar

Serverdelshanterade identitetstjänster underhåller en tokencache som uppdaterar en token för en målresurs endast när den upphör att gälla. Om du försöker ändra dina SQL Database-behörigheter när du först har fått en token med din app får du inte en ny token med uppdaterade behörigheter förrän den cachelagrade token upphör att gälla.

Ta bort den ursprungliga anslutningssträngen

Alla ändringar som du har gjort i web.config eller appsettings.json arbetar med den hanterade identiteten. Du kan ta bort den ursprungliga anslutningssträngen som du använde när du distribuerade appen första gången. Om du vill ta bort anslutningssträngen kör du följande Azure CLI-kommando och ersätter <app-name> med namnet på din app och <connection-string-name> med namnet på anslutningssträngen.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names <connection-string-name>

Konfigurera utvecklingsmiljön

Konfigurera din valda utvecklingsmiljö och logga in på Azure. Mer information om hur du konfigurerar utvecklingsmiljön för Microsoft Entra-autentisering finns i Azure Identity-klientbiblioteket för .NET.

Visual Studio för Windows är integrerat med Microsoft Entra-autentisering.

  1. Om du vill aktivera utveckling och felsökning i Visual Studio lägger du till din Microsoft Entra-användare i Visual Studio genom att välja Inställningar för filkonto> på den översta menyn och sedan välja Logga in eller Lägg till.
  2. Om du vill ange Microsoft Entra-användaren för Azure-tjänstautentisering, välj Verktyg>Alternativ från den översta menyn och välj sedan Azure-tjänstautentisering>Kontoval. Välj den Microsoft Entra-användare som du lade till och välj OK.

Ändra projektet och publicera din app

Din Azure SQL-databasbaserade webbapp använder en databaskontext för att ansluta till databasen. Om du vill använda Microsoft Entra-autentisering för att fungera med appen måste du uppdatera databaskontexten så att den refererar till Entity Framework SQL Server-providern, som är beroende av den moderna Microsoft.Data.SqlClient-ADO.NET providern.

Entity Framework-providern ersätter den inbyggda System.Data.SqlClient SQL Server-providern och har stöd för Microsoft Entra ID-autentiseringsmetoder. Mer information finns i Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] fungerar lokalt för att använda Microsoft.Data.SqlClient i databaskontexten, men eftersom System.Data.SqlClient är hårdkodad som leverantör i Azure App Service måste du utöka MicrosoftSqlDbConfiguration för att omdirigera System.Data.SqlClient-referenser till Microsoft.Data.SqlClient istället. Stegen varierar beroende på om du har en ASP.NET eller ASP.NET Core-app.

En ASP.NET Core-app använder Entity Framework Core som standard.

  1. I Visual Studio Package Manager-konsolen lägger du till NuGet-paketet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. I appsettings.jsonersätter du värdet för anslutningssträngen med följande kod och ersätter <server-name och <database-name> med servernamnet och databasnamnet.

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Kommentar

    Du kan använda Active Directory Default-autentisering både på din lokala dator och i Azure App Service. Drivrutinen kan hämta en token från Microsoft Entra-ID på flera olika sätt.

    Om appen distribueras, får föraren en token från appens systemtilldelade hanterade identitet. Drivrutinen kan också autentisera med en användartilldelad hanterad identitet om du tar med User Id=<client-id-of-user-assigned-managed-identity>; i anslutningssträngen.

    Klassen DefaultAzureCredential cachelagrar token i minnet och hämtar den från Microsoft Entra-ID innan den upphör att gälla. Du behöver ingen anpassad kod för att uppdatera token.

    Nu har du allt du behöver för att ansluta till Azure SQL Database när du felsöker i Visual Studio. Koden använder den Microsoft Entra-användare som du konfigurerade när du konfigurerade utvecklingsmiljön.

  3. Kör din app. CRUD-appen i webbläsaren ansluter direkt till Azure SQL-databasen med Hjälp av Microsoft Entra-autentisering. Med den här konfigurationen kan du köra databasmigreringar från Visual Studio.

  4. Publicera dina ändringar med hjälp av följande Git-kommandon:

    git commit -am "configure managed identity"
    git push azure main
    

Testa appen

När du ser din att göra-lista på den nya webbsidan ansluter din app till databasen med hjälp av den hanterade identiteten.

Skärmbild som visar Azure-appen efter Code First Migration.

Nu kan du redigera to-do-listan.

Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden tar du bort resursgruppen genom att köra följande kommando i Cloud Shell:

az group delete --name myResourceGroup

Det kan ta en minut att köra kommandot.