Självstudie: Anslut till SQL Database från .NET App Service utan hemligheter med hjälp av 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:

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.

Arkitekturdiagram för självstudiescenario.

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: Anslut 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
  • Anslut 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:

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-portalen.

Förbered din miljö för Azure CLI.

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.

  1. 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.

  2. 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'.

  3. 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

  1. 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 Filkonto>Inställningar på menyn och välja Logga in eller Lägg till.

  2. 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 Identityfinns 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).

  1. Ö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
    
  2. 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ör MyDbConnection 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.

  3. 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, men en användartilldelad identitet kan lika enkelt användas. För att göra detta. du skulle behöva ändra az webapp identity assign command för att tilldela önskad användartilldelad identitet. När du sedan skapar SQL-användaren måste du använda namnet på den användartilldelade identitetsresursen i stället för platsnamnet.

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": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "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
  1. Ö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
    
  2. 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. 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).

  3. 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.

  1. 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.

    Publicera från Solution Explorer

  2. 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.

Azure-app efter Code First Migration

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
  • Anslut till SQL Database från Visual Studio med Microsoft Entra-autentisering