Självstudie: Ansluta 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.

Anteckning

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 Azure AD-autentisering med SQL Database
  • Ansluta till SQL Database från Visual Studio med Azure AD-autentisering

Anteckning

Azure AD autentisering skiljer sig från integrerad Windows-autentisering i lokal Active Directory (AD DS). AD DS och Azure AD använda helt olika autentiseringsprotokoll. Mer information finns i Azure AD Domain Services-dokumentationen.

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

Du kan använda antingen Azure Cloud Shell eller ett lokalt Azure CLI.

1. Bevilja databasåtkomst till Azure AD användare

Aktivera först Azure Active Directory-autentisering för att SQL Database genom att tilldela en Azure AD 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 Azure AD. Mer information om tillåtna Azure AD användare finns i Azure AD funktioner och begränsningar i SQL Database.

  1. Om din Azure AD 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 Azure Active Directory.

  2. Leta upp objekt-ID:t för Azure AD-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 [].objectId --output tsv)
    

    Tips

    Om du vill se listan över alla användarhuvudnamn i Azure AD kör du az ad user list --query [].userPrincipalName.

  3. Lägg till den här Azure AD användaren som Active Directory-administratör med kommandot az sql server ad-admin create i Cloud Shell. I följande kommando ersätter du <servernamn> med servernamnet (utan suffixet .database.windows.net ).

    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 Azure Active Directory-administratör för servern

2. Konfigurera utvecklingsmiljön

  1. Visual Studio för Windows är integrerat med Azure AD-autentisering. Om du vill aktivera utveckling och felsökning i Visual Studio lägger du till din Azure AD-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.

  2. Om du vill ange den Azure AD användaren för Azure-tjänstautentisering väljer du Verktygsalternativ> på menyn och väljer sedanKontoval förAzure-tjänstautentisering>. Välj den Azure AD användare som du lade till och välj OK.

Mer information om hur du konfigurerar utvecklingsmiljön för Azure Active Directory-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 Azure AD autentisering.

3. Ändra projektet

Anteckning

Microsoft.Azure.Services.AppAuthentication rekommenderas inte längre att använda med nya Azure SDK. Det ersätts med ett nytt Azure Identity-klientbibliotek 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 (standard för ASP.NET) eller Entity Framework Core (standard för ASP.NET Core).

  1. Öppna Package Manager-konsolen i Visual Studio och lägg till NuGet-paketet Azure.Identity och uppdatera Entity Framework:

    Install-Package Azure.Identity
    Update-Package EntityFramework
    
  2. I ditt DbContext-objekt (i Models/MyDbContext.cs) lägger du till följande kod i standardkonstruktorn.

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    var credential = new Azure.Identity.DefaultAzureCredential();
    var token = credential.GetToken(new Azure.Core.TokenRequestContext(new[] { "https://database.windows.net/.default" }));
    conn.AccessToken = token.Token;
    

    Den här koden använder Azure.Identity.DefaultAzureCredential för att hämta en användbar token för SQL Database från Azure Active Directory och lägger sedan till den i databasanslutningen. Du kan anpassa DefaultAzureCredential, men som standard är det redan mycket mångsidigt. När den körs i App Service används appens systemtilldelade hanterade identitet. När den körs lokalt kan den hämta en token med hjälp av den inloggade identiteten för Visual Studio, Visual Studio Code, Azure CLI och Azure PowerShell.

  3. I Web.configletar du upp anslutningssträngen med namnet MyDbConnection och ersätter dess connectionString värde med "server=tcp:<server-name>.database.windows.net;database=<db-name>;". Ersätt <server-name> och <db-name> med servernamnet och databasnamnet. Den här anslutningssträngen används av standardkonstruktorn i Models/MyDbContext.cs.

    Det är allt du behöver för att ansluta till SQL Database. Vid felsökning i Visual Studio använder koden den Azure AD 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.

  4. 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 Azure AD autentisering. Med den här konfigurationen kan du köra databasmigreringar från Visual Studio.

4. Använd hanterad identitetsanslutning

Därefter konfigurerar du din App Service-app för att ansluta till SQL Database med en systemtilldelad hanterad identitet.

Anteckning

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 ska du se till att 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 app-name> i följande kommando<.

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

Anteckning

Om du vill aktivera hanterad identitet för ett distributionsfack lägger du till --slot <slot-name> och använder namnet på platsen 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

Anteckning

Om du vill kan du lägga till identiteten i en Azure AD grupp och sedan bevilja SQL Database åtkomst till den Azure AD gruppen i stället för identiteten. Följande kommandon lägger till exempel till den hanterade identiteten från föregående steg i 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 <server-name> med ditt servernamn, <db-name med det databasnamn> som appen använder och <aad-user-name> och <aad-password> med din Azure AD användarens autentiseringsuppgifter.

    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
    

    <identity-name> är namnet på den hanterade identiteten i Azure AD. 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 Azure AD grupp använder du gruppens visningsnamn i stället (till exempel myAzureSQLDBAccessGroup).

  3. Skriv EXIT för att återgå till Cloud Shell-prompten.

    Anteckning

    Serverdelstjänsterna för hanterade identiteter upprätthåller 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.

    Anteckning

    Azure Active Directory och hanterade identiteter stöds inte för lokala 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 gör är att ta bort den befintliga anslutningssträngen i App Service, som Visual Studio skapade när du distribuerade appen första gången. Använd följande kommando, men ersätt <app-name> 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 kommer 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änstens namn inte matchar 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 Azure AD-autentisering med SQL Database
  • Ansluta till SQL Database från Visual Studio med Azure AD-autentisering