Zelfstudie: Verbinding maken een App Service-app namens de aangemelde gebruiker naar SQL Database

In deze zelfstudie leert u hoe u ingebouwde verificatie inschakelt in een App Service-app met behulp van de Microsoft Entra-verificatieprovider en deze vervolgens uitbreidt door deze te verbinden met een back-end Azure SQL Database door de aangemelde gebruiker (ook wel de on-behalf-of-flow genoemd) te imiteren. Dit is een geavanceerdere connectiviteitsbenadering voor zelfstudie: Toegang tot gegevens met beheerde identiteit en heeft de volgende voordelen in bedrijfsscenario's:

  • Elimineert verbindingsgeheimen met back-endservices, net zoals de benadering van beheerde identiteiten.
  • Geeft de back-enddatabase (of een andere Azure-service) meer controle over wie of hoeveel toegang moet worden verleend tot de gegevens en functionaliteit.
  • Hiermee kan de app de gegevenspresentatie aanpassen aan de aangemelde gebruiker.

In deze zelfstudie voegt u Microsoft Entra-verificatie toe aan de voorbeeldweb-app die u in een van de volgende zelfstudies hebt geïmplementeerd:

Wanneer u klaar bent, verifieert uw voorbeeld-app gebruikers veilig verbinding met SQL Database namens de aangemelde gebruiker.

Architecture diagram for tutorial scenario.

Notitie

De stappen in deze zelfstudie ondersteunen de volgende versies:

  • .NET Framework 4.8 en hoger
  • .NET 6.0 en hoger

U leert het volgende:

  • Ingebouwde verificatie inschakelen voor Azure SQL Database
  • Andere verificatieopties uitschakelen in Azure SQL Database
  • App Service-verificatie inschakelen
  • Microsoft Entra-id gebruiken als id-provider
  • Toegang tot Azure SQL Database namens de aangemelde Microsoft Entra-gebruiker

Notitie

Microsoft Entra-verificatie verschilt van Geïntegreerde Windows-verificatie in on-premises Active Directory (AD DS). AD DS en Microsoft Entra ID maken gebruik van volledig verschillende verificatieprotocollen. Zie de documentatie van Microsoft Entra Domain Services voor meer informatie.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

In dit artikel wordt verdergegaan waar u was gebleven in een van de volgende zelfstudies:

Als u dat nog niet hebt gedaan, volgt u eerst een van de twee zelfstudies. U kunt ook de stappen aanpassen voor uw eigen .NET-app met SQL Database.

Bereid uw omgeving voor op Azure CLI.

Azure host Azure Cloud Shell, een interactieve shell-omgeving die u via uw browser kunt gebruiken. U kunt Bash of PowerShell gebruiken met Cloud Shell om met Azure-services te werken. U kunt de vooraf geïnstalleerde Cloud Shell-opdrachten gebruiken om de code in dit artikel uit te voeren zonder dat u iets hoeft te installeren in uw lokale omgeving.

Om Azure Cloud Shell op te starten:

Optie Voorbeeld/koppeling
Selecteer Uitproberen in de rechterbovenhoek van een code- of opdrachtblok. Als u Try It selecteert, wordt de code of opdracht niet automatisch gekopieerd naar Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Ga naar https://shell.azure.com, of selecteer de knop Cloud Shell starten om Cloud Shell in uw browser te openen. Button to launch Azure Cloud Shell.
Klik op de knop Cloud Shell in het menu in de balk rechtsboven in de Azure-portal. Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell gebruiken:

  1. Start Cloud Shell.

  2. Selecteer de knop Kopiëren op een codeblok (of opdrachtblok) om de code of opdracht te kopiëren.

  3. Plak de code of opdracht in de Cloud Shell-sessie door Ctrl+Shift+V in Windows en Linux te selecteren of door Cmd+Shift+V te selecteren in macOS.

  4. Selecteer Enter om de code of opdracht uit te voeren.

1. Databaseserver configureren met Microsoft Entra-verificatie

Schakel eerst Microsoft Entra-verificatie in voor SQL Database door een Microsoft Entra-gebruiker toe te wijzen als beheerder van de server. Deze gebruiker wijkt af van de Microsoft-account die u hebt gebruikt om u aan te melden voor uw Azure-abonnement. Het moet een gebruiker zijn die u hebt gemaakt, geïmporteerd, gesynchroniseerd of uitgenodigd in Microsoft Entra-id. Zie Microsoft Entra-functies en -beperkingen in SQL Database voor meer informatie over toegestane Microsoft Entra-gebruikers.

  1. Als uw Microsoft Entra-tenant nog geen gebruiker heeft, maakt u er een door de stappen te volgen bij Gebruikers toevoegen of verwijderen met behulp van Microsoft Entra-id.

  2. Zoek de object-id van de Microsoft Entra-gebruiker met behulp van de az ad user list user-principal-name> en vervang <deze. Het resultaat wordt opgeslagen in een variabele.

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Tip

    Als u de lijst met alle user principal names in Microsoft Entra ID wilt zien, voert u het volgende uit az ad user list --query [].userPrincipalName.

  3. Voeg deze Microsoft Entra-gebruiker toe als Active Directory-beheerder met behulp van az sql server ad-admin create de opdracht in Cloud Shell. Vervang <in de volgende opdracht de servernaam> door de servernaam (zonder het .database.windows.net achtervoegsel).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Beperk de verificatie van de databaseserver tot Active Directory-verificatie. Met deze stap wordt SQL-verificatie effectief uitgeschakeld.

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

Zie Microsoft Entra-beheerder (SQL Database) inrichten voor meer informatie over het toevoegen van een Active Directory-beheerder.

2. Gebruikersverificatie inschakelen voor uw app

U schakelt verificatie met Microsoft Entra-id in als id-provider. Zie Microsoft Entra-verificatie configureren voor uw App Services-toepassing voor meer informatie.

  1. Selecteer in het menu van de Azure-portal de optie Resourcegroepen of zoek ernaar en selecteer Resourcegroepen vanaf een willekeurige pagina.

  2. Zoek en selecteer uw resourcegroep in Resourcegroepen en selecteer vervolgens uw app.

  3. Selecteer verificatie in het linkermenu van uw app en selecteer vervolgens Id-provider toevoegen.

  4. Selecteer Op de pagina Een id-provider toevoegen Microsoft als id-providerom u aan te melden bij Microsoft- en Microsoft Entra-identiteiten.

  5. Accepteer de standaardinstellingen en selecteer Toevoegen.

    Screenshot showing the add identity provider page.

Tip

Als u fouten ondervindt en de verificatie-instellingen van uw app opnieuw configureert, worden de tokens in het tokenarchief mogelijk niet opnieuw gegenereerd vanuit de nieuwe instellingen. Als u er zeker van wilt zijn dat de tokens opnieuw worden gegenereerd, dient u zich af te melden en vervolgens opnieuw aan te melden. U kunt dit doen door de browser in de privémodus te zetten en de browser vervolgens te sluiten en opnieuw in de privémodus te openen nadat u de instellingen in de apps hebt gewijzigd.

3. Gebruikersimitatie configureren voor SQL Database

Op dit moment maakt uw Azure-app verbinding met SQL Database gebruik van SQL-verificatie (gebruikersnaam en wachtwoord) die worden beheerd als app-instellingen. In deze stap geeft u de app machtigingen voor toegang tot SQL Database namens de aangemelde Microsoft Entra-gebruiker.

  1. Selecteer op de pagina Verificatie voor de app de naam van uw app onder Id-provider. Deze app-registratie is automatisch voor u gegenereerd. Selecteer API-machtigingen in het linkermenu.

  2. Selecteer Een machtiging toevoegen, en selecteer vervolgens API's die in mijn organisatie worden gebruikt.

  3. Typ Azure SQL Database in het zoekvak en selecteer het resultaat.

  4. Selecteer op de pagina Api-machtigingen aanvragen voor Azure SQL Database gedelegeerde machtigingen en user_impersonation en selecteer vervolgens Machtigingen toevoegen.

    Screenshot of the Request API permissions page showing Delegated permissions, user_impersonation, and the Add permission button selected.

4. Configureer App Service om een bruikbaar toegangstoken te retourneren

De app-registratie in Microsoft Entra ID heeft nu de vereiste machtigingen om verbinding te maken met SQL Database door de aangemelde gebruiker te imiteren. Vervolgens configureert u uw App Service-app om u een bruikbaar toegangstoken te geven.

Voer in Cloud Shell de volgende opdrachten uit in de app om de scope parameter toe te voegen aan de verificatie-instelling identityProviders.azureActiveDirectory.login.loginParameters.

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"

Met de opdrachten wordt effectief een loginParameters eigenschap met extra aangepaste bereiken toegevoegd. Hier volgt een uitleg van de aangevraagde bereiken:

  • openid, profileen email worden standaard al aangevraagd door App Service. Zie OpenID Verbinding maken Bereiken voor meer informatie.
  • https://database.windows.net/user_impersonation verwijst naar Azure SQL Database. Dit is het bereik waarmee u een JWT-token krijgt dat SQL Database als tokendoel bevat.
  • offline_access is hier voor het gemak opgenomen (voor het geval u tokens wilt vernieuwen).

Tip

Als u de vereiste bereiken wilt configureren met behulp van een webinterface, raadpleegt u de Stappen van Microsoft bij Verificatietokens vernieuwen.

Uw apps zijn nu geconfigureerd. De app kan nu een token genereren dat door SQL Database wordt geaccepteerd.

5. Gebruik het toegangstoken in uw toepassingscode

De stappen die u voor uw project volgt, zijn afhankelijk van of u Entity Framework (standaard voor ASP.NET) of Entity Framework Core (standaard voor ASP.NET Core) gebruikt.

  1. Open in Visual Studio de Pakketbeheer Console en werk Entity Framework bij:

    Update-Package EntityFramework
    
  2. Voeg in uw DbContext-object (in Modellen/MyDbContext.cs) de volgende code toe aan de standaardconstructor.

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

Notitie

Met de code wordt het toegangstoken dat door App Service-verificatie wordt geleverd, toegevoegd aan het verbindingsobject.

Deze codewijziging werkt niet lokaal. Zie Hoe kan ik lokaal fouten opsporen bij het gebruik van App Service-verificatie? voor meer informatie.

6. Uw wijzigingen publiceren

  1. Als u afkomstig bent uit zelfstudie: Een ASP.NET-app bouwen in Azure met SQL Database, stelt u een verbindingsreeks in App Service in met behulp van SQL-verificatie, met een gebruikersnaam en wachtwoord. Gebruik de volgende opdracht om de verbindingsgeheimen te verwijderen, maar vervang groepsnaam>, <app-naam>, <db-servernaam> en <db-naam> door die van u.<

    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. Publiceer uw wijzigingen in Visual Studio. Klik in de Solution Explorer met de rechtermuisknop op uw project DotNetAppSqlDb en selecteer Publiceren.

    Screenshot showing how to publish from the Solution Explorer in Visual Studio.

  3. Selecteer Publiceren op de publicatiepagina.

Wanneer op de nieuwe webpagina uw takenlijst wordt weergegeven, maakt uw app verbinding met de database namens de aangemelde Microsoft Entra-gebruiker.

Azure app after Code First Migration

U zou nu de takenlijst moeten kunnen bewerken als voorheen.

7. Resources opschonen

In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources niet meer nodig denkt te hebben, verwijdert u de resourcegroep door de volgende opdracht in Cloud Shell uit te voeren:

az group delete --name <group-name>

Het kan een minuut duren voordat deze opdracht is uitgevoerd.

Veelgestelde vragen

Waarom krijg ik een Login failed for user '<token-identified principal>'. foutmelding?

De meest voorkomende oorzaken van deze fout zijn:

Hoe kan ik andere Microsoft Entra-gebruikers of -groepen toevoegen in Azure SQL Database?

  1. Verbinding maken naar uw databaseserver, zoals sqlcmd of SSMS.

  2. Maak ingesloten gebruikers die zijn toegewezen aan Microsoft Entra-identiteiten in sql Database-documentatie.

    In het volgende Transact-SQL-voorbeeld wordt een Microsoft Entra-identiteit aan SQL Server toegevoegd en worden er enkele databaserollen aan gegeven:

    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
    

Hoe kan ik lokaal fouten opsporen bij het gebruik van App Service-verificatie?

Omdat App Service-verificatie een functie in Azure is, is het niet mogelijk om dezelfde code in uw lokale omgeving te gebruiken. In tegenstelling tot de app die wordt uitgevoerd in Azure, profiteert uw lokale code niet van de verificatie-middleware van App Service. U hebt een aantal alternatieven:

  • Verbinding maken vanuit uw lokale omgeving naar SQL Database.Active Directory Interactive De verificatiestroom meldt de gebruiker niet aan bij de app zelf, maar maakt wel verbinding met de back-enddatabase met de aangemelde gebruiker en stelt u in staat om de databaseautorisatie lokaal te testen.
  • Kopieer het toegangstoken handmatig naar https://<app-name>.azurewebsites.net/.auth/me uw code in plaats van de X-MS-TOKEN-AAD-ACCESS-TOKEN aanvraagheader.
  • Als u implementeert vanuit Visual Studio, gebruikt u externe foutopsporing van uw App Service-app.

Wat gebeurt er wanneer toegangstokens verlopen?

Uw toegangstoken verloopt na bepaalde tijd. Voor meer informatie over het vernieuwen van uw toegangstokens zonder dat gebruikers zich opnieuw moeten verifiëren bij uw app raadpleegt u Toegangstokens van id-providers vernieuwen.

Volgende stappen

Wat u hebt geleerd:

  • Ingebouwde verificatie inschakelen voor Azure SQL Database
  • Andere verificatieopties uitschakelen in Azure SQL Database
  • App Service-verificatie inschakelen
  • Microsoft Entra-id gebruiken als id-provider
  • Toegang tot Azure SQL Database namens de aangemelde Microsoft Entra-gebruiker