Självstudie: Anslut till SQL Database från .NET App Service utan hemligheter med en hanterad identitet
Med App Service får du en automatiskt uppdaterad webbvärdtjänst i Azure med hög skalbarhet. Dessutom får du en hanterad identitet för din app. Det här är en användningsklar lösning som skyddar åtkomsten till Azure SQL Database och andra Azure-tjänster. Med hanterade identiteter i App Service blir dina appar säkrare eftersom du inte har några hemligheter i dina appar. Du har till exempel inga inloggningsuppgifter i anslutningssträngarna. I den här självstudien lägger du till hanterad identitet i exempelwebbappen som du skapade i någon av följande självstudier:
- Självstudie: Skapa en ASP.NET-app i Azure med Azure SQL Database
- Självstudie: Skapa en ASP.NET Core- och Azure SQL Database-app i Azure App Service
När du är färdig ansluter exempelappen säkert till SQL Database utan att du behöver använda användarnamn och lösenord.
Kommentar
Stegen som beskrivs i den här självstudien stöder följande versioner:
- .NET Framework 4.8 och senare
- .NET 6.0 och senare
Vägledning för Azure Database for MySQL eller Azure Database for PostgreSQL i andra språkramverk (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.
Vad du kommer att lära dig:
- Aktivera hanterade identiteter
- Ge SQL Database åtkomst till den hanterade identiteten
- Konfigurera Entity Framework för att använda Microsoft Entra-autentisering med SQL Database
- Ansluta till SQL Database från Visual Studio med Microsoft Entra-autentisering
Kommentar
Microsoft Entra-autentisering skiljer sig från integrerad Windows-autentisering i lokal Active Directory (AD DS). AD DS och Microsoft Entra ID använder helt olika autentiseringsprotokoll. Mer information finns i Dokumentation om Microsoft Entra Domain Services.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
Förutsättningar
Den här artikeln fortsätter där du slutade i någon av följande självstudier:
- Självstudie: Skapa en ASP.NET-app i Azure med SQL Database
- Självstudie: Skapa en ASP.NET Core- och SQL Database-app i Azure App Service.
Om du inte redan har gjort det följer du en av de två självstudierna först. Du kan också anpassa stegen för din egen .NET-app med SQL Database.
Om du vill felsöka din app med SQL Database som serverdel kontrollerar du att du har tillåtit klientanslutning från datorn. Om inte lägger du till klient-IP genom att följa stegen i Hantera IP-brandväggsregler på servernivå med hjälp av Azure Portal.
Förbered din miljö för Azure CLI.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i 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 Logga in 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 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.
1. Bevilja databasåtkomst till Microsoft Entra-användare
Aktivera först Microsoft Entra-autentisering till SQL Database genom att tilldela en Microsoft Entra-användare som administratör för servern. Den här användaren skiljer sig från det Microsoft-konto som du använde för att registrera dig för din Azure-prenumeration. Det måste vara en användare som du har skapat, importerat, synkroniserat eller bjudit in till Microsoft Entra-ID. Mer information om tillåtna Microsoft Entra-användare finns i Microsoft Entra-funktioner och begränsningar i SQL Database.
Om din Microsoft Entra-klientorganisation inte har någon användare än skapar du en genom att följa stegen i Lägg till eller ta bort användare med hjälp av Microsoft Entra-ID.
Leta reda på objekt-ID:t för Microsoft Entra-användaren med hjälp av
az ad user list
och ersätt <user-principal-name>. Resultatet sparas i en variabel.$azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
Dricks
Om du vill se listan över alla användarhuvudnamn i Microsoft Entra-ID kör du
az ad user list --query '[].userPrincipalName'
.Lägg till den här Microsoft Entra-användaren som Active Directory-administratör med hjälp av
az sql server ad-admin create
kommandot i Cloud Shell. Ersätt servernamn med servernamnet (utan suffixet.database.windows.net
) i följande kommando<.>az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
Mer information om hur du lägger till en Active Directory-administratör finns i Etablera en Microsoft Entra-administratör för servern
2. Konfigurera utvecklingsmiljön
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å menyn och välja Logga in eller Lägg till.
Om du vill ange Microsoft Entra-användaren för Azure-tjänstautentisering väljer du Verktygsalternativ> på menyn och väljer sedan Kontoval för Azure-tjänstautentisering.> Välj den Microsoft Entra-användare som du lade till och välj OK.
Mer information om hur du konfigurerar utvecklingsmiljön för Microsoft Entra-autentisering finns i Azure Identity-klientbiblioteket för .NET.
Nu är du redo att utveckla och felsöka din app med SQL Database som serverdel med hjälp av Microsoft Entra-autentisering.
3. Ändra projektet
Kommentar
Microsoft.Azure.Services.AppAuthentication rekommenderas inte längre att använda med nya Azure SDK.
Det ersätts med det nya Azure Identity-klientbiblioteket som är tillgängligt för .NET, Java, TypeScript och Python och bör användas för all ny utveckling.
Information om hur du migrerar till Azure Identity
finns här: Vägledning för AppAuthentication till Azure.Identity Migration.
Vilka steg du följer för projektet beror på om du använder Entity Framework Core (standard för ASP.NET Core) eller Entity Framework (standard för ASP.NET).
Öppna Package Manager-konsolen i Visual Studio och lägg till NuGet-paketet Microsoft.Data.SqlClient:
Install-Package Microsoft.Data.SqlClient -Version 5.1.0
I självstudien
MyDbConnection
ASP.NET Core och SQL Database används inte anslutningssträng i appsettings.json ännu. Både den lokala miljön och Azure-miljön får anslutningssträng från sina respektive miljövariabler för att hålla anslutningshemligheter borta från källfilen. Men nu med Active Directory-autentisering finns det inga fler hemligheter. I appsettings.json ersätter du värdet förMyDbConnection
anslutningssträng med:"Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
Kommentar
Active Directory-standardautentiseringstypen kan användas både på din lokala dator och i Azure App Service. Drivrutinen försöker hämta en token från Microsoft Entra-ID på olika sätt. Om appen distribueras hämtar den en token från appens systemtilldelade hanterade identitet. Den kan också autentiseras med en användartilldelad hanterad identitet om du inkluderar:
User Id=<client-id-of-user-assigned-managed-identity>;
i din anslutningssträng. Om appen körs lokalt försöker den hämta en token från Visual Studio, Visual Studio Code och Azure CLI.Det är allt du behöver för att ansluta till SQL Database. När du felsöker i Visual Studio använder koden den Microsoft Entra-användare som du konfigurerade i 2. Konfigurera utvecklingsmiljön. Du konfigurerar SQL Database senare för att tillåta anslutning från den hanterade identiteten för din App Service-app. Klassen
DefaultAzureCredential
cachelagrar token i minnet och hämtar den från Microsoft Entra-ID strax före förfallodatumet. Du behöver ingen anpassad kod för att uppdatera token.Skriv
Ctrl+F5
för att köra appen igen. Samma CRUD-app i webbläsaren ansluter nu direkt till Azure SQL Database med Hjälp av Microsoft Entra-autentisering. Med den här konfigurationen kan du köra databasmigreringar från Visual Studio.
4. Använd hanterad identitetsanslutning
Därefter konfigurerar du App Service-appen så att den ansluter till SQL Database med en systemtilldelad hanterad identitet.
Kommentar
Anvisningarna i det här avsnittet gäller för en systemtilldelad identitet. Om du vill använda en användartilldelad identitet kan du läsa Självstudie: Ansluta till Azure-databaser från App Service utan hemligheter med hjälp av en hanterad identitet.
Aktivera hanterad identitet i appen
När du ska aktivera en hanterad identitet för din Azure-app använder du kommandot az webapp identity assign i Cloud Shell. Ersätt appnamn i följande kommando<.>
az webapp identity assign --resource-group myResourceGroup --name <app-name>
Kommentar
Om du vill aktivera hanterad identitet för ett distributionsfack lägger du till --slot <slot-name>
och använder namnet på facket i< slot-name>.
Här är ett exempel på utdata:
{ "additionalProperties": {}, "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "type": "SystemAssigned" }
Bevilja behörigheter till hanterad identitet
Kommentar
Om du vill kan du lägga till identiteten i en Microsoft Entra-grupp och sedan ge SQL Database åtkomst till Microsoft Entra-gruppen i stället för identiteten. Följande kommandon lägger till den hanterade identiteten från föregående steg till en ny grupp med namnet 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
Öppna Cloud Shell och logga in på SQL Database med kommandot SQLCMD. Ersätt servernamn> med ditt servernamn,< db-name> med det databasnamn som appen använder, samt< aad-user-name> och <aad-password> med autentiseringsuppgifterna för din Microsoft Entra-användare.<
sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
I SQL-prompten för den databas du vill använda kör du följande kommandon för att bevilja de minsta behörigheter som din app behöver. Ett exempel:
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
<identitetsnamn> är namnet på den hanterade identiteten i Microsoft Entra-ID. Om identiteten är systemtilldelad är namnet alltid detsamma som namnet på din App Service-app. För ett distributionsfack är <namnet på dess systemtilldelade identitet app-name>/slots/<slot-name>. Om du vill bevilja behörigheter för en Microsoft Entra-grupp använder du gruppens visningsnamn i stället (till exempel myAzureSQLDBAccessGroup).
Skriv
EXIT
för att återgå till Cloud Shell-prompten.Kommentar
Serverdelstjänsterna för hanterade identiteter har också en tokencache som uppdaterar token för en målresurs endast när den upphör att gälla. Om du gör ett misstag när du konfigurerar dina SQL Database-behörigheter och försöker ändra behörigheterna när du har försökt hämta en token med din app, får du faktiskt inte en ny token med de uppdaterade behörigheterna förrän den cachelagrade token upphör att gälla.
Kommentar
Microsoft Entra-ID och hanterade identiteter stöds inte för lokal SQL Server.
Ändra anslutningssträngen
Kom ihåg att samma ändringar som du gjorde i Web.config eller appsettings.json fungerar med den hanterade identiteten, så det enda du behöver göra är att ta bort den befintliga anslutningssträng i App Service, som Visual Studio skapade när appen distribueras första gången. Använd följande kommando, men ersätt <appnamn> med namnet på din app.
az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection
5. Publicera dina ändringar
Nu behöver du bara publicera ändringarna till Azure.
Om du kom från Självstudie: Skapa en ASP.NET app i Azure med SQL Database publicerar du dina ändringar i Visual Studio. I Solution Explorer: Högerklicka på projektet DotNetAppSqlDb och välj Publicera.
Välj Publicera på publiceringssidan.
Viktigt!
Se till att apptjänstnamnet inte överensstämmer med befintliga appregistreringar. Detta leder till konflikter mellan huvudnamns-ID:t.
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.
Du ska nu kunna redigera att göra-listan som innan.
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 några minuter att köra kommandot.
Nästa steg
Vad du lärt dig:
- Aktivera hanterade identiteter
- Ge SQL Database åtkomst till den hanterade identiteten
- Konfigurera Entity Framework för att använda Microsoft Entra-autentisering med SQL Database
- Ansluta till SQL Database från Visual Studio med Microsoft Entra-autentisering