Tutorial: Verbinden einer App Service-App mit SQL-Datenbank im Namen des angemeldeten Benutzers bzw. der angemeldeten Benutzerin

In diesem Tutorial erfahren Sie, wie Sie die integrierte Authentifizierung in einer App vom Typ App Service mithilfe des Microsoft Entra-Authentifizierungsanbieters aktivieren und sie anschließend erweitern, indem Sie sie mit einer Azure SQL-Datenbank-Back-End-Instanz verbinden und dabei die Identität des angemeldeten Benutzers bzw. der angemeldeten Benutzerin annehmen (auch als On-Behalf-Of-Flow bezeichnet). Dies ist ein erweiterter Konnektivitätsansatz für Tutorial: Zugreifen auf Daten mithilfe einer verwalteten Identität und bietet in Unternehmensszenarien folgende Vorteile:

  • Beseitigt Verbindungsgeheimnisse für Back-End-Dienste, genau wie beim Ansatz für verwaltete Identitäten.
  • Gibt der Back-End-Datenbank (oder einem beliebigen anderen Azure-Dienst) mehr Kontrolle darüber, wem bzw. wie viel Zugriff auf die zugehörigen Daten und Funktionen gewährt werden soll.
  • Ermöglicht der App das Anpassen der Datendarstellung an den angemeldeten Benutzer bzw. an die angemeldete Benutzerin.

In diesem Tutorial wird der Beispiel-Web-App, die Sie in einem der folgenden Tutorials bereitgestellt haben, Microsoft Entra-Authentifizierung hinzugefügt:

Wenn Sie fertig sind, authentifiziert Ihre Beispiel-App Benutzer*innen, damit sie im Namen des angemeldeten Benutzers bzw. der angemeldeten Benutzerin eine sichere Verbindung mit SQL-Datenbank herstellen können.

Architecture diagram for tutorial scenario.

Hinweis

Die in diesem Tutorial behandelten Schritte gelten für die folgenden Versionen:

  • Mindestens .NET Framework 4.8
  • Mindestens .NET 6.0

Sie lernen Folgendes:

  • Aktivieren der integrierten Authentifizierung für Azure SQL-Datenbank
  • Deaktivieren anderer Authentifizierungsoptionen in Azure SQL-Datenbank
  • Aktivieren der App Service-Authentifizierung
  • Verwenden von Microsoft Entra ID als Identitätsanbieter
  • Zugreifen auf Azure SQL-Datenbank im Namen des angemeldeten Microsoft Entra-Benutzers bzw. der angemeldeten Microsoft Entra-Benutzerin

Hinweis

Die Microsoft Entra-Authentifizierung unterscheidet sich von der integrierten Windows-Authentifizierung im lokalen Active Directory (AD DS). AD DS und Microsoft Entra ID verwenden grundverschiedene Authentifizierungsprotokolle. Weitere Informationen finden Sie unter Dokumentation zu Microsoft Entra Domain Services.

Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.

Voraussetzungen

Dieser Artikel wird an der Stelle fortgesetzt, an der Sie eines der folgenden beiden Tutorials unterbrochen haben:

Absolvieren Sie zunächst eins der beiden Tutorials, sofern noch nicht geschehen. Alternativ können Sie die Schritte für Ihre eigene .NET-App mit SQL-Datenbank anpassen.

Bereiten Sie die Umgebung für die Azure CLI vor.

Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.

Starten von Azure Cloud Shell:

Option Beispiel/Link
Wählen Sie rechts oben in einem Code- oder Befehlsblock die Option Ausprobieren aus. Durch die Auswahl von Ausprobieren wird der Code oder Befehl nicht automatisch in Cloud Shell kopiert. Screenshot that shows an example of Try It for Azure Cloud Shell.
Rufen Sie https://shell.azure.com auf, oder klicken Sie auf die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen. Button to launch Azure Cloud Shell.
Wählen Sie im Azure-Portal rechts oben im Menü die Schaltfläche Cloud Shell aus. Screenshot that shows the Cloud Shell button in the Azure portal

So verwenden Sie Azure Cloud Shell:

  1. Starten Sie Cloud Shell.

  2. Wählen Sie die Schaltfläche Kopieren für einen Codeblock (oder Befehlsblock) aus, um den Code oder Befehl zu kopieren.

  3. Fügen Sie den Code oder Befehl mit STRG+UMSCHALT+V unter Windows und Linux oder CMD+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.

  4. Drücken Sie die EINGABETASTE, um den Code oder Befehl auszuführen.

1. Konfigurieren des Datenbankservers mit Microsoft Entra-Authentifizierung

Aktivieren Sie zunächst die Microsoft Entra-Authentifizierung für SQL-Datenbank, indem Sie eine*n Microsoft Entra-Benutzer*in als Administrator*in des Servers zuweisen. Dieser Benutzer unterscheidet sich von dem Microsoft-Konto, das Sie bei der Registrierung für Ihr Azure-Abonnement verwendet haben. Es muss sich um eine*n Benutzer*in handeln, den bzw. die Sie in Microsoft Entra ID erstellt, importiert, synchronisiert oder eingeladen haben. Weitere Informationen zu zulässigen Microsoft Entra-Benutzer*innen finden Sie unter Microsoft Entra-Features und -Einschränkungen in SQL-Datenbank.

  1. Wenn Ihr Microsoft Entra-Mandant noch keine Benutzer*innen enthält, erstellen Sie diese, indem Sie die Schritte unter Hinzufügen oder Löschen von Benutzer*innen mit Microsoft Entra ID ausführen.

  2. Ermitteln Sie die Objekt-ID des Microsoft Entra-Benutzers bzw. der Microsoft Entra-Benutzerin mithilfe von az ad user list, und ersetzen Sie den Platzhalter <user-principal-name>. Das Ergebnis wird in einer Variablen gespeichert.

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

    Tipp

    Um die Liste aller Benutzerprinzipalnamen in Microsoft Entra ID anzuzeigen, führen Sie az ad user list --query [].userPrincipalName aus.

  3. Fügen Sie diesen Microsoft Entra-Benutzer mithilfe des Befehls az sql server ad-admin create in Cloud Shell als Active Directory-Administrator hinzu. Ersetzen Sie im folgenden Befehl <server-name> durch den Servernamen (ohne das Suffix .database.windows.net).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Beschränken Sie die Datenbankserverauthentifizierung auf die Active Directory-Authentifizierung. Durch diesen Schritt wird die SQL-Authentifizierung effektiv deaktiviert.

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

Weitere Informationen zum Hinzufügen von Active Directory-Administrator*innen finden Sie unter Bereitstellen von Microsoft Entra-Administrator*innen (SQL-Datenbank).

2. Aktivieren der Benutzerauthentifizierung für Ihre App

Sie aktivieren die Authentifizierung mit Microsoft Entra ID als Identitätsanbieter. Weitere Informationen finden Sie unter Konfigurieren der Microsoft Entra-Authentifizierung für die App Services-Anwendung.

  1. Wählen Sie im Menü Azure-Portal den Eintrag Ressourcengruppen aus, oder suchen und wählen Sie auf einer beliebigen Seite Ressourcengruppen aus.

  2. Wählen Sie unter Ressourcengruppen Ihre Ressourcengruppe und anschließend Ihre App aus.

  3. Wählen Sie im linken Menü der App die Option Authentifizierung und anschließend Identitätsanbieter hinzufügen aus.

  4. Wählen Sie auf der Seite Identitätsanbieter hinzufügen die Option Microsoft als Identitätsanbieter aus, um Microsoft- und Microsoft Entra ID-Identitäten anzumelden.

  5. Übernehmen Sie die Standardeinstellungen, und wählen Sie Hinzufügen aus.

    Screenshot showing the add identity provider page.

Tipp

Falls Fehler auftreten und Sie die Authentifizierungseinstellungen Ihrer App neu konfigurieren, werden die Token im Tokenspeicher möglicherweise nicht auf der Grundlage der neuen Einstellungen neu generiert. Um sicherzustellen, dass Ihre Token neu generiert werden können, müssen Sie sich abmelden und neu an der App anmelden. Eine einfache Möglichkeit hierfür ist die Verwendung Ihres Browsers im privaten Modus und das Schließen und erneute Öffnen des Browsers im privaten Modus, nachdem Sie die Einstellungen in Ihren Apps geändert haben.

3. Konfigurieren des Benutzeridentitätswechsels für SQL-Datenbank

Derzeit stellt Ihre Azure-App eine Verbindung mit SQL-Datenbank her und verwendet dabei die als App-Einstellungen verwaltete SQL-Authentifizierung (Benutzername und Kennwort). In diesem Schritt erteilen Sie der App Berechtigungen für den Zugriff auf SQL-Datenbank im Namen des angemeldeten Microsoft Entra-Benutzers bzw. der angemeldeten Microsoft Entra-Benutzerin.

  1. Wählen Sie auf der Seite Authentifizierung für die App unter Identitätsanbieter den Namen Ihrer App aus. Diese App-Registrierung wurde automatisch für Sie generiert. Wählen Sie im linken Menü API-Berechtigungen aus.

  2. Wählen Sie Berechtigung hinzufügen und anschließend Von meiner Organisation verwendete APIs aus.

  3. Geben Sie Azure SQL-Datenbank in das Suchfeld ein, und wählen Sie das Ergebnis aus.

  4. Wählen Sie auf der Seite API-Berechtigungen anfordern für Azure SQL-Datenbank die Optionen Delegierte Berechtigungen und user_impersonation und anschließend Berechtigungen hinzufügen aus.

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

4. Konfigurieren von App Service für die Rückgabe eines verwendbaren Zugriffstokens

Die App-Registrierung in Microsoft Entra ID verfügt jetzt über die erforderlichen Berechtigungen, um eine Verbindung mit SQL-Datenbank herzustellen und dabei die Identität des angemeldeten Benutzers bzw. der angemeldeten Benutzerin anzunehmen. Als Nächstes konfigurieren Sie Ihre App Service-App für die Rückgabe eines verwendbares Zugriffstokens.

Führen Sie in Cloud Shell die folgenden Befehle für die App aus, um der Authentifizierungseinstellung identityProviders.azureActiveDirectory.login.loginParameters den Parameter scope hinzuzufügen.

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"

Die Befehle fügen effektiv eine loginParameters-Eigenschaft mit zusätzlichen benutzerdefinierten Bereichen hinzu. Hier ist eine Beschreibung der angeforderten Bereiche angegeben:

  • openid, profile und email werden von App Service bereits standardmäßig angefordert. Weitere Informationen finden Sie unter OpenID Connect-Bereiche.
  • https://database.windows.net/user_impersonation verweist auf Azure SQL-Datenbank. Es ist der Bereich, über den Sie ein JWT-Token erhalten, in dem SQL-Datenbank als Tokenzielgruppe enthalten ist.
  • offline_access ist hier als Hilfe angegeben (falls Sie Token aktualisieren möchten).

Tipp

Falls Sie die erforderlichen Bereiche stattdessen per Weboberfläche konfigurieren möchten, helfen Ihnen die Microsoft-Schritte unter Aktualisieren von Authentifizierungstoken weiter.

Ihre Apps sind nun konfiguriert. Die App kann jetzt ein Token generieren, das von SQL-Datenbank akzeptiert wird.

5. Verwenden des Zugriffstokens in Ihrem Anwendungscode

Welche Schritte Sie für das Projekt ausführen, hängt davon ab, ob Sie Entity Framework (Standardeinstellung für ASP.NET) oder Entity Framework Core (Standardeinstellung für ASP.NET Core) verwenden.

  1. Öffnen Sie in Visual Studio die Paket-Manager-Konsole, und aktualisieren Sie Entity Framework:

    Update-Package EntityFramework
    
  2. Fügen Sie im DbContext-Objekt (in Models/MyDbContext.cs) dem Standardkonstruktor folgenden Code hinzu.

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

Hinweis

Der Code fügt dem Verbindungsobjekt das von der App Service-Authentifizierung bereitgestellte Zugriffstoken hinzu.

Diese Codeänderung funktioniert nicht lokal. Weitere Informationen finden Sie unter Wie kann ich bei Verwendung der App Service-Authentifizierung lokal debuggen?.

6. Veröffentlichen Ihrer Änderungen

  1. Wenn Sie zuvor das Tutorial Bereitstellen einer ASP.NET-App in Azure mit Azure SQL-Datenbank durchlaufen haben, legen Sie in App Service eine Verbindungszeichenfolge unter Verwendung der SQL-Authentifizierung mit einem Benutzernamen und einem Kennwort fest. Verwenden Sie den folgenden Befehl, um die Verbindungsgeheimnisse zu entfernen, aber ersetzen Sie <group-name> (Gruppenname), <app-name> (App-Name), <db-server-name> (Datenbankservername) und <db-name> (Datenbankname) durch Ihre eigenen Angaben.

    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. Veröffentlichen Sie Ihre Änderungen in Visual Studio. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt DotNetAppSqlDb, und wählen Sie Veröffentlichen aus.

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

  3. Wählen Sie auf der Veröffentlichungsseite die Option Veröffentlichen aus.

Wenn auf der neuen Webseite Ihre Aufgabenliste angezeigt wird, stellt Ihre App im Namen des angemeldeten Microsoft Entra-Benutzers bzw. der angemeldeten Microsoft Entra-Benutzerin eine Verbindung mit der Datenbank her.

Azure app after Code First Migration

Die Aufgabenliste sollte sich nun wie gewohnt bearbeiten lassen.

7. Bereinigen von Ressourcen

In den vorherigen Schritten haben Sie Azure-Ressourcen in einer Ressourcengruppe erstellt. Wenn Sie diese Ressourcen in Zukunft nicht mehr benötigen, löschen Sie die Ressourcengruppe, indem Sie den folgenden Befehl in Cloud Shell ausführen:

az group delete --name <group-name>

Die Ausführung dieses Befehls kann eine Minute in Anspruch nehmen.

Häufig gestellte Fragen

Warum tritt bei mir ein Fehler vom Typ Login failed for user '<token-identified principal>'. auf?

Die häufigsten Ursachen dieses Fehlers sind:

Wie kann ich in Azure SQL-Datenbank weitere Microsoft Entra-Benutzer*innen oder -Gruppen hinzufügen?

  1. Stellen Sie eine Verbindung mit Ihrem Datenbankserver her (beispielsweise mit sqlcmd oder SSMS).

  2. Erstellen eigenständiger Benutzer*innen mit Zuordnung zu Microsoft Entra-Identitäten in der Dokumentation zu SQL-Datenbank.

    Im folgenden Transact-SQL-Beispiel wird SQL Server eine Microsoft Entra-Identität hinzugefügt, und es werden einige Datenbankrollen zugewiesen:

    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
    

Wie kann ich bei Verwendung der App Service-Authentifizierung lokal debuggen?

Da es sich bei der App Service-Authentifizierung um ein Feature in Azure handelt, ist es nicht möglich, den gleichen Code in Ihrer lokalen Umgebung zu verwenden. Im Gegensatz zu der in Azure ausgeführten App profitiert Ihr lokaler Code nicht von der Authentifizierungsmiddleware von App Service. Es gibt ein paar Alternativen:

  • Stellen Sie mit Active Directory Interactive von Ihrer lokalen Umgebung aus eine Verbindung mit SQL-Datenbank her. Im Rahmen des Authentifizierungsablaufs werden Benutzer*innen nicht bei der App selbst angemeldet. Vielmehr wird eine Verbindung mit der Back-End-Datenbank mit dem angemeldeten Benutzer bzw. mit der angemeldeten Benutzerin hergestellt, was es Ihnen ermöglicht, die Datenbankautorisierung lokal zu testen.
  • Kopieren Sie das Zugriffstoken https://<app-name>.azurewebsites.net/.auth/me manuell in Ihren Code (an der Position des Anforderungsheaders X-MS-TOKEN-AAD-ACCESS-TOKEN).
  • Wenn Sie die Bereitstellung über Visual Studio durchführen, verwenden Sie Remotedebuggen für Ihre App Service-App.

Was passiert, wenn Zugriffstoken ablaufen?

Das Zugriffstoken läuft nach einiger Zeit ab. Informationen dazu, wie Sie Zugriffstoken aktualisieren, ohne dass sich Benutzer erneut bei Ihrer App authentifizieren müssen, finden Sie unter Erweiterte Verwendung der Authentifizierung und Autorisierung in Azure App Service.

Nächste Schritte

Sie haben Folgendes gelernt:

  • Aktivieren der integrierten Authentifizierung für Azure SQL-Datenbank
  • Deaktivieren anderer Authentifizierungsoptionen in Azure SQL-Datenbank
  • Aktivieren der App Service-Authentifizierung
  • Verwenden von Microsoft Entra ID als Identitätsanbieter
  • Zugreifen auf Azure SQL-Datenbank im Namen des angemeldeten Microsoft Entra-Benutzers bzw. der angemeldeten Microsoft Entra-Benutzerin