Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
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
-
Om du inte har något Azure-konto skapar du ett kostnadsfritt konto innan du börjar.
Ha en grundläggande Azure App Service ASP.NET MVC eller ASP.NET Core MVC CRUD-app (create-read-update-delete) som använder Azure SQL Database med SQL-autentisering som serverdel. Stegen i den här självstudien stöder följande .NET-versioner:
- .NET Framework 4.8 och senare
- .NET 6.0 och senare
Tillåt klientanslutning från datorn till Azure, så att du kan felsöka din app i utvecklingsmiljön. Du kan lägga till klientens IP-adress genom att följa stegen i Hantera IP-brandväggsregler på servernivå med hjälp av Azure-portalen.
Logga in på Azure Cloud Shell eller förbered din miljö för att använda Azure CLI.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Kom igång med Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Autentisera till Azure med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
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.
- Mer information om hur du skapar en Microsoft Entra-användare finns i Lägga till eller ta bort användare med hjälp av Microsoft Entra-ID.
- Mer information om tillåtna Microsoft Entra-användare för SQL Database finns i Microsoft Entra-funktioner och begränsningar i SQL Database.
- Mer information om hur du lägger till en Azure SQL-serveradministratör finns i Etablera en Microsoft Entra-administratör för servern.
Kör följande kommandon i Bash-miljön i Azure Cloud Shell eller när du har loggat in på Azure CLI lokalt.
Använd
az ad user list
med parameterndisplay-name
,filter
ellerupn
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öraz 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"
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 parameternobject-id
. I följande kommando ersätter du<server-name>
med servernamnet minus suffixet.database.windows.net
och<entra-id>
medid
värdet från utdata från föregåendeaz 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.
Ö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>
meduserPrincipalName
administratörsanvändarens från utdata från föregåendeaz 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.
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.
- 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.
- 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.
I Visual Studio Package Manager-konsolen lägger du till NuGet-paketet Microsoft.Data.SqlClient.
Install-Package Microsoft.Data.SqlClient
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.
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.
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.
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.
Relaterat innehåll
- Självstudie: Använda en anpassad domän och ett hanterat certifikat för att skydda din app
- Självstudie: Ansluta en App Service-app till SQL Database för den inloggade användarens räkning
- Självstudie: Ansluta till Azure-databaser från App Service utan hemligheter med hjälp av en hanterad identitet
- Självstudie: Ansluta till Azure-tjänster som inte stöder hanterade identiteter med Hjälp av Key Vault
- Självstudie: Isolera serverdelskommunikation med integrering av virtuellt nätverk