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:
- 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 klar autentiserar exempelappen användare som ansluter till SQL Database på ett säkert sätt för den inloggade användarens räkning.
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:
- 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.
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. | |
Gå till https://shell.azure.com eller Välj knappen Starta Cloud Shell för att öppna Cloud Shell i webbläsaren. | |
Välj knappen Cloud Shell på menyn längst upp till höger i Azure-portalen. |
Så här använder du Azure Cloud Shell:
Starta Cloud Shell.
Välj knappen Kopiera i ett kodblock (eller kommandoblock) för att kopiera koden eller kommandot.
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.
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.
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 <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
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.
På menyn Azure Portal väljer du Resursgrupper eller söker efter och väljer Resursgrupper på valfri sida.
I Resursgrupper letar du upp och väljer din resursgrupp och väljer sedan din app.
I appens vänstra meny väljer du Autentisering och sedan Lägg till identitetsprovider.
På sidan Lägg till en identitetsprovider väljer du Microsoft som identitetsprovider för att logga in Microsoft- och Microsoft Entra-identiteter.
Acceptera standardinställningarna och välj Lägg till.
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.
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.
Välj Lägg till en behörighet och välj sedan API:er som min organisation använder.
Skriv Azure SQL Database i sökrutan och välj resultatet.
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.
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
,profile
ochemail
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).
Öppna Package Manager-konsolen i Visual Studio och uppdatera Entity Framework:
Update-Package EntityFramework
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
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>;"
Publicera dina ändringar i Visual Studio. I Solution Explorer: Högerklicka på projektet DotNetAppSqlDb och välj Publicera.
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.
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? - Hur gör jag för att lägga till andra Microsoft Entra-användare eller -grupper i Azure SQL Database?
- Hur gör jag för att felsöka lokalt när du använder App Service-autentisering?
- Vad händer när åtkomsttoken upphör att gälla?
Varför får jag ett Login failed for user '<token-identified principal>'.
fel?
De vanligaste orsakerna till det här felet är:
- Du kör koden lokalt och det finns ingen giltig token i begärandehuvudet
X-MS-TOKEN-AAD-ACCESS-TOKEN
. Se Hur gör jag för att felsöka lokalt när du använder App Service-autentisering?. - Microsoft Entra-autentisering har inte konfigurerats i sql-databasen.
- Den inloggade användaren får inte ansluta till databasen. Se Hur gör jag för att lägga till andra Microsoft Entra-användare eller -grupper i Azure SQL Database?.
Hur gör jag för att lägga till andra Microsoft Entra-användare eller -grupper i Azure SQL Database?
Anslut till databasservern, till exempel med sqlcmd eller SSMS.
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ärandehuvudetX-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