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 ansluter en Azure App Service-app till en Azure SQL-serverdelsdatabas genom att personifiera den inloggade användaren, som även kallas för flödets räkning. För att konfigurera det här flödet aktiverar du inbyggd App Service-autentisering med hjälp av Microsoft Entra-identitetsprovidern.

Den här anslutningsmetoden är mer avancerad än metoden för hanterad identitet i Självstudie: Få åtkomst till data med hanterad identitet och har följande fördelar i företagsscenarier:

  • Eliminerar anslutningshemligheter till serverdelstjänster, liksom metoden för hanterad identitet.
  • Ger serverdelsdatabasen eller andra Azure-tjänster mer kontroll över hur mycket åtkomst som ska beviljas till vem.
  • 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 en .NET-webbapp som har en Azure SQL Database-serverdel. Du lär dig att:

  • Aktivera Microsoft Entra-autentisering för Azure SQL Database.
  • Inaktivera andra autentiseringsalternativ för SQL Database.
  • Lägg till Microsoft Entra-ID som identitetsprovider för din app.
  • Konfigurera behörighet att personifiera SQL Database-användare.
  • Konfigurera App Service för att tillhandahålla en användbar åtkomsttoken för SQL Database.
  • Få åtkomst till din Azure SQL-databas för den inloggade Microsoft Entra-användarens räkning.

När du slutför självstudien ansluter appen säkert till SQL Database för den inloggade användarens räkning.

Arkitekturdiagram för självstudiescenario.

Kommentar

  • Microsoft Entra-ID 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

1. Konfigurera databasservern med Microsoft Entra-autentisering

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. Microsoft Entra-användaren kanske inte är samma som Microsoft-kontoanvändaren för Azure-prenumerationen.

Om du vill lägga till Microsoft Entra-ID-användaren som administratör för Azure SQL-servern kör du följande Azure CLI-kommandon.

  1. Använd az ad user list med parametern display-name, filtereller upn för att hämta objekt-ID:t för den Microsoft Entra-ID-användare som du vill göra till administratör. 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"
    

    Kopiera värdet id från utdata som ska användas i nästa steg.

    Tips

    Du kan köra az ad user list fristående för att visa information för alla användare i Microsoft Entra-katalogen.

  2. Lägg till Microsoft Entra-ID-användaren som administratör på azure SQL-servern med hjälp az sql server ad-admin create av parametern object-id . I följande kommando ersätter du <group-name> med serverns resursgruppnamn, <server-name> med serverns namn minus suffixet .database.windows.net och <entra-id> med id utdata från föregående az ad user list kommando.

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Begränsa endast databasserverautentisering till Microsoft Entra-autentisering. Det här steget inaktiverar autentisering av SQL-användarnamn och lösenord.

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

2. Aktivera Microsoft Entra-ID-autentisering för din app

Lägg till Microsoft Entra-ID som identitetsprovider för din app. Mer information finns i Konfigurera Microsoft Entra-autentisering för ditt App Services-program.

  1. På sidan Azure-portalen för din app väljer du Autentisering under Inställningar i den vänstra navigeringsmenyn.

  2. På sidan Autentisering väljer du Lägg till identitetsprovider eller väljer Lägg till provider i avsnittet Identitetsprovider .

  3. På sidan Lägg till en identitetsprovider väljer du Microsoft som provider.

  4. För Förfallodatum för klienthemlighet väljer du något av listrutans alternativ, till exempel Rekommenderas: 180 dagar.

  5. Behåll alla standardinställningar och välj Lägg till.

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

Kommentar

Om du konfigurerar om appens autentiseringsinställningar kanske token i tokenarkivet inte återskapas från de nya inställningarna. Logga ut och logga in i appen igen för att se till att dina token återskapas. En enkel metod är att använda webbläsaren i privat läge. Stäng och öppna webbläsaren igen i privat läge när du har ändrat inställningarna i dina appar.

3. Konfigurera SQL Database-användarpersonifiering

Ge din app behörighet att komma åt SQL Database för den inloggade Microsoft Entra-användarens räkning.

  1. På appens autentiseringssida väljer du ditt appnamn under Identitetsprovider.

    Sidan för appregistrering öppnas. Den här registreringen genererades automatiskt när du lade till Microsoft Entra-providern.

  2. Välj API-behörigheter under Hantera i den vänstra navigeringsmenyn.

  3. På sidan API-behörigheter väljer du Lägg till en behörighet.

  4. På skärmen Api-behörigheter för begäran väljer du fliken API:er som min organisation använder .

  5. Ange Azure SQL Database i sökrutan och välj resultatet.

  6. Under Vilken typ av behörigheter kräver ditt program väljer du Delegerade behörigheter och markerar sedan kryssrutan bredvid user_impersonation och väljer 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.

Appregistreringen i Microsoft Entra har nu de behörigheter som krävs för att ansluta till SQL Database genom att personifiera den inloggade användaren.

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

Om du vill konfigurera din app för att tillhandahålla en användbar åtkomsttoken för SQL Database lägger du till https://database.windows.net/user_impersonation som en scope i appens Microsoft Entra-provider loginParameters. Följande kommando lägger till loginParameters egenskapen med anpassade omfång i inställningarna för Microsoft Entra-identitetsprovidern login .

Av de begärda omfången begär openidApp Service redan , profileoch email omfång som standard. Omfånget offline_access ingår så att du kan uppdatera token. Mer information finns i OpenID Connect-omfång.

Omfånget https://database.windows.net/user_impersonation refererar till Azure SQL Database och tillhandahåller en JSON-webbtoken (JWT) som anger SQL Database som tokenmottagare. Det här kommandot använder jq för JSON-bearbetning, som redan är installerat 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"

Tips

Om du vill konfigurera det nödvändiga omfånget med hjälp av ett webbgränssnitt i stället för Azure CLI använder du Konfigurera Microsoft Entra-providern för att tillhandahålla uppdateringstoken och lägger https://database.windows.net/user_impersonation till i de begärda omfången.

Din app är nu konfigurerad för att generera en åtkomsttoken som SQL Database accepterar.

Kommentar

Åtkomsttoken upphör att gälla efter en viss tid. Information om hur du uppdaterar dina åtkomsttoken utan att kräva att användarna autentiserar igen med din app finns i Uppdatera autentiseringstoken.

5. Använd åtkomsttoken i programkoden

Uppdatera programkoden för att lägga till den åtkomsttoken som tillhandahålls av App Service-autentisering till anslutningsobjektet.

Kommentar

Den här koden fungerar inte lokalt. Mer information och alternativ för lokal felsökning finns i Felsöka lokalt när du använder App Service-autentisering.

  1. I objektet DbContext i DatabaseContext.cs eller en annan fil som konfigurerar databaskontexten ändrar du standardkonstruktorn för att lägga till Åtkomsttoken för Microsoft Entra-ID i anslutningsobjektet.

    public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor)
        : base(options)
    {
        var conn = Database.GetDbConnection() as SqlConnection;
        conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    }
    
  2. Om du har en anslutningssträng som heter defaultConnection i App Service som använder SQL-autentisering med ett användarnamn och lösenord använder du följande kommando för att ta bort anslutningshemligheterna. Ersätt <group-name>, <app-name>, <db-server-name>och <db-name> med dina värden.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    

6. Publicera dina ändringar

Om du använde Visual Studio Code i webbläsaren för att göra dina kodändringar i din GitHub-förgrening väljer du Källkontroll på den vänstra menyn. Ange ett incheckningsmeddelande som OBO connect och välj Checka in.

Incheckningen utlöser en GitHub Actions-distribution till App Service. Vänta några minuter tills distributionen är klar.

Du kan också publicera dina ändringar i Git Bash med hjälp av följande kommandon:

git commit -am "configure managed identity"
git push azure main

Om koden finns i Visual Studio:

  1. Högerklicka på projektet i Solution Explorer och välj Publicera.

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

  2. På sidan Publicera väljer du Publicera.

När den nya appsidan visar din app ansluter appen till Azure SQL-databasen för den inloggade Microsoft Entra-användarens räkning. Du bör kunna använda och redigera din app som vanligt.

Skärmbild som visar webbappen efter publicering.

7. Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. När du inte längre behöver dessa resurser tar du bort resursgruppen genom att köra följande kommando:

az group delete --name <group-name>

Det här kommandot kan ta lite tid att köra.

Vanliga frågor och svar

Varför visas felet "Inloggningen misslyckades för användarens< tokenidentifierade huvudnamn>"?

De vanligaste orsakerna till ett Login failed for user '<token-identified principal>' fel är:

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

Om du vill lägga till fler användare eller grupper ansluter du till databasservern med sqlcmd eller SQL Server Management Studio (SSMS) och skapar oberoende databasanvändare som mappats till Microsoft Entra-identiteter.

Följande Transact-SQL exempel lägger till en Microsoft Entra-identitet till SQL Server och ger identiteten vissa 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 Azure-funktion fungerar inte koden i den här självstudien i din lokala miljö. Till skillnad från en app som körs i Azure drar din lokala kod inte nytta av Mellanprogrammet för App Service-autentisering. Du kan använda följande alternativ för lokal felsökning:

  • Anslut till SQL Database från din lokala miljö med Active Directory Interactive autentisering. Det här autentiseringsflödet loggar inte in själva användaren, men ansluter till serverdelsdatabasen med den inloggade användaren så att du kan testa databasauktoriseringen lokalt.
  • Kopiera åtkomsttoken manuellt 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.