Dela via


Självstudie: Ansluta en App Service-app till SQL Database för den inloggade användarens räkning

Den här självstudien visar hur du aktiverar inbyggd autentisering i en App Service-app med hjälp av Microsoft Entra-autentiseringsprovidern och sedan utökar den genom att ansluta den till en Azure SQL Database i serverdelen genom att personifiera den inloggade användaren (kallas även för flödets räkning). Det här är en mer avancerad anslutningsmetod för Självstudie: Få åtkomst till data med hanterad identitet och har följande fördelar i företagsscenarier:

  • Eliminerar anslutningshemligheter till serverdelstjänster, precis som metoden för hanterad identitet.
  • Ger serverdelsdatabasen (eller någon annan Azure-tjänst) mer kontroll över vem eller hur mycket som ska ge åtkomst till dess data och funktioner.
  • Låter appen anpassa sin datapresentation till den inloggade användaren.

I den här självstudien lägger du till Microsoft Entra-autentisering i exempelwebbappen som du distribuerade i någon av följande självstudier:

När du är klar autentiserar exempelappen användare som ansluter till SQL Database på ett säkert sätt för den inloggade användarens räkning.

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

Vad du kommer att lära dig:

  • Aktivera inbyggd autentisering för Azure SQL Database
  • Inaktivera andra autentiseringsalternativ i Azure SQL Database
  • Aktivera App Service-autentisering
  • Använda Microsoft Entra-ID som identitetsprovider
  • Få åtkomst till Azure SQL Database för den inloggade Microsoft Entra-användaren

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.

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

Azure är värd för Azure Cloud Shell, en interaktiv gränssnittsmiljö som du kan använda via webbläsaren. Du kan använda antingen Bash eller PowerShell med Cloud Shell för att arbeta med Azure-tjänster. Du kan använda förinstallerade Cloud Shell-kommandon för att köra koden i den här artikeln, utan att behöva installera något i din lokala miljö.

Så här startar du Azure Cloud Shell:

Alternativ Exempel/länk
Välj Prova i det övre högra hörnet i en kod eller ett kommandoblock. Om du väljer Prova kopieras inte koden eller kommandot automatiskt till Cloud Shell. Skärmbild som visar ett exempel på Try It for Azure Cloud Shell.
Gå till https://shell.azure.com eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. Knapp för att starta Azure Cloud Shell.
Välj knappen Cloud Shell på menyn längst upp till höger i Azure-portalen. Skärmbild som visar Cloud Shell-knappen i Azure Portal

Så här använder du Azure Cloud Shell:

  1. Starta Cloud Shell.

  2. Välj knappen Kopiera i ett kodblock (eller kommandoblock) för att kopiera koden eller kommandot.

  3. Klistra in koden eller kommandot i Cloud Shell-sessionen genom att välja Ctrl+Skift+V i Windows och Linux, eller genom att välja Cmd+Shift+V på macOS.

  4. Välj Retur för att köra koden eller kommandot.

1. Konfigurera databasservern med Microsoft Entra-autentisering

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 <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Begränsa databasserverautentiseringen till Active Directory-autentisering. Det här steget inaktiverar effektivt SQL-autentisering.

    az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
    

Mer information om hur du lägger till en Active Directory-administratör finns i Etablera Microsoft Entra-administratör (SQL Database).

2. Aktivera användarautentisering för din app

Du aktiverar autentisering med Microsoft Entra-ID som identitetsprovider. Mer information finns i Konfigurera Microsoft Entra-autentisering för ditt App Services-program.

  1. På menyn Azure Portal väljer du Resursgrupper eller söker efter och väljer Resursgrupper på valfri sida.

  2. I Resursgrupper letar du upp och väljer din resursgrupp och väljer sedan din app.

  3. I appens vänstra meny väljer du Autentisering och sedan Lägg till identitetsprovider.

  4. På sidan Lägg till en identitetsprovider väljer du Microsoft som identitetsprovider för att logga in Microsoft- och Microsoft Entra-identiteter.

  5. Acceptera standardinställningarna och välj Lägg till.

    Skärmbild som visar sidan Lägg till identitetsprovider.

Dricks

Om du stöter på fel och konfigurerar om appens autentiseringsinställningar kan det hända att token i tokenarkivet inte återskapas från de nya inställningarna. För att se till att dina token skapas måste du logga ut och sedan logga in i appen igen. Ett enkelt sätt att göra det är att använda webbläsaren i privat läge. Stäng webbläsaren och öppna den sedan i privat läge igen när du har ändrat inställningarna i dina appar.

3. Konfigurera personifiering av användare till SQL Database

För närvarande ansluter din Azure-app till SQL Database och använder SQL-autentisering (användarnamn och lösenord) som hanteras som appinställningar. I det här steget ger du appen behörighet att komma åt SQL Database för den inloggade Microsoft Entra-användarens räkning.

  1. På sidan Autentisering för appen väljer du ditt appnamn under Identitetsprovider. Den här appregistreringen genererades automatiskt åt dig. Välj API-behörigheter i den vänstra menyn.

  2. Välj Lägg till en behörighet och välj sedan API:er som min organisation använder.

  3. Skriv Azure SQL Database i sökrutan och välj resultatet.

  4. På sidan Förfrågnings-API-behörigheter för Azure SQL Database väljer du Delegerade behörigheter och user_impersonation och sedan Lägg till behörigheter.

    Skärmbild av sidan Förfrågnings-API-behörigheter som visar Delegerade behörigheter, user_impersonation och knappen Lägg till behörighet har valts.

4. Konfigurera App Service för att returnera en användbar åtkomsttoken

Appregistreringen i Microsoft Entra-ID:t har nu de behörigheter som krävs för att ansluta till SQL Database genom att personifiera den inloggade användaren. Därefter konfigurerar du din App Service-app för att ge dig en användbar åtkomsttoken.

I Cloud Shell kör du följande kommandon i appen för att lägga till parametern scope i autentiseringsinställningen identityProviders.azureActiveDirectory.login.loginParameters. Den använder [jq] för JSON-bearbetning, som redan är installerad i Cloud Shell.

authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"

Kommandona lägger effektivt till en loginParameters egenskap med extra anpassade omfång. Här är en förklaring av de begärda omfången:

  • openid, profileoch email begärs redan av App Service. Mer information finns i OpenID Connect-omfång.
  • https://database.windows.net/user_impersonation refererar till Azure SQL Database. Det är omfånget som ger dig en JWT-token som innehåller SQL Database som en token-målgrupp.
  • offline_access ingår här för enkelhetens skull (om du vill uppdatera token).

Dricks

Information om hur du konfigurerar de nödvändiga omfången med hjälp av ett webbgränssnitt finns i Microsoft-stegen i Uppdatera autentiseringstoken.

Nu har apparna konfigurerats. Appen kan nu generera en token som SQL Database accepterar.

5. Använd åtkomsttoken i programkoden

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 uppdatera Entity Framework:

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

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    conn.AccessToken = System.Web.HttpContext.Current.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    

Kommentar

Koden lägger till den åtkomsttoken som tillhandahålls av App Service-autentisering till anslutningsobjektet.

Den här kodändringen fungerar inte lokalt. Mer information finns i Hur gör jag för att felsöka lokalt när du använder App Service-autentisering?.

6. Publicera dina ändringar

  1. Om du kom från Självstudie: Skapa en ASP.NET-app i Azure med SQL Database anger du en anslutningssträng i App Service med hjälp av SQL-autentisering med ett användarnamn och lösenord. Använd följande kommando för att ta bort anslutningshemligheterna, men ersätt gruppnamn>, <appnamn>, <db-server-name> och< db-name> med ditt.<

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings MyDbConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    
  2. Publicera dina ändringar i Visual Studio. I Solution Explorer: Högerklicka på projektet DotNetAppSqlDb och välj Publicera.

    Skärmbild som visar hur du publicerar från Solution Explorer i Visual Studio.

  3. Välj Publicera på publiceringssidan.

När den nya webbsidan visar din att göra-lista ansluter appen till databasen för den inloggade Microsoft Entra-användarens räkning.

Azure-app efter Code First Migration

Du ska nu kunna redigera att göra-listan som innan.

7. 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 <group-name>

Det kan några minuter att köra kommandot.

Vanliga frågor och svar

Varför får jag ett Login failed for user '<token-identified principal>'. fel?

De vanligaste orsakerna till det här felet är:

Hur gör jag för att lägga till andra Microsoft Entra-användare eller -grupper i Azure SQL Database?

  1. Anslut till databasservern, till exempel med sqlcmd eller SSMS.

  2. Skapa inneslutna användare som mappas till Microsoft Entra-identiteter i SQL Database-dokumentationen.

    Följande Transact-SQL-exempel lägger till en Microsoft Entra-identitet till SQL Server och ger den några databasroller:

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

Hur gör jag för att felsöka lokalt när du använder App Service-autentisering?

Eftersom App Service-autentisering är en funktion i Azure är det inte möjligt att samma kod fungerar i din lokala miljö. Till skillnad från appen som körs i Azure drar din lokala kod inte nytta av mellanprogrammet för autentisering från App Service. Du har några alternativ:

  • Anslut till SQL Database från din lokala miljö med Active Directory Interactive. Autentiseringsflödet loggar inte in användaren till själva appen, men det ansluter till serverdelsdatabasen med den inloggade användaren och gör att du kan testa databasauktorisering lokalt.
  • Kopiera åtkomsttoken manuellt från https://<app-name>.azurewebsites.net/.auth/me till din kod i stället för begärandehuvudet X-MS-TOKEN-AAD-ACCESS-TOKEN .
  • Om du distribuerar från Visual Studio använder du fjärrfelsökning av din App Service-app.

Vad händer när åtkomsttoken upphör att gälla?

Ditt åtkomsttoken upphör att gälla efter ett tag. Information om hur du uppdaterar dina åtkomsttoken utan att användarna måste autentiseras på nytt med din app finns på sidan om att uppdatera token för identitetsprovider.

Nästa steg

Vad du lärt dig:

  • Aktivera inbyggd autentisering för Azure SQL Database
  • Inaktivera andra autentiseringsalternativ i Azure SQL Database
  • Aktivera App Service-autentisering
  • Använda Microsoft Entra-ID som identitetsprovider
  • Få åtkomst till Azure SQL Database för den inloggade Microsoft Entra-användaren