Freigeben über


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

In diesem Lernprogramm wird gezeigt, wie Sie eine Azure App Service-App mit einer Back-End-Azure SQL-Datenbank verbinden, indem Sie den Identitätswechsel des angemeldeten Benutzers durchführen, der auch als " Im Auftrag von"-Fluss bezeichnet wird. Um diesen Fluss zu konfigurieren, aktivieren Sie die integrierte App Service-Authentifizierung mithilfe des Microsoft Entra-Identitätsanbieters.

Diese Konnektivitätsmethode ist fortgeschrittener als der Ansatz für verwaltete Identitäten im Lernprogramm: Zugreifen auf Daten mit verwalteter Identität und hat die folgenden Vorteile in Unternehmensszenarien:

  • Entfernt Verbindungsgeheimnisse mit Back-End-Diensten, ebenso wie der Ansatz für verwaltete Identitäten.
  • Bietet der Back-End-Datenbank oder anderen Azure-Diensten mehr Kontrolle darüber, wie viel Zugriff auf wen gewährt werden soll.
  • Ermöglicht der App das Anpassen der Datendarstellung an den angemeldeten Benutzer bzw. an die angemeldete Benutzerin.

In diesem Lernprogramm fügen Sie eine Microsoft Entra-Authentifizierung zu einer .NET-Web-App hinzu, die über ein Azure SQL-Datenbank-Back-End verfügt. Hier erfahren Sie, wie Sie:

  • Aktivieren Sie die Microsoft Entra-Authentifizierung für Azure SQL-Datenbank.
  • Deaktivieren Sie andere SQL-Datenbankauthentifizierungsoptionen.
  • Fügen Sie Microsoft Entra-ID als Identitätsanbieter für Ihre App hinzu.
  • Konfigurieren Der Identitätswechselberechtigung für SQL-Datenbankbenutzer.
  • Konfigurieren Sie App Service, um ein verwendbares Zugriffstoken für SQL-Datenbank bereitzustellen.
  • Greifen Sie im Namen des angemeldeten Microsoft Entra-Benutzers auf Ihre Azure SQL-Datenbank zu.

Wenn Sie das Lernprogramm abgeschlossen haben, stellt Ihre App sicher eine Verbindung mit der SQL-Datenbank im Namen des angemeldeten Benutzers herstellt.

Architekturdiagramm für Lernprogrammszenario.

Hinweis

Voraussetzungen

1. Konfigurieren des Datenbankservers mit Microsoft Entra-Authentifizierung

Aktivieren Sie die Microsoft Entra-Authentifizierung für die Azure SQL-Datenbank, indem Sie einen Microsoft Entra-Benutzer als Administrator des Azure SQL-Servers zuweisen. Der Microsoft Entra-Administrator muss ein Benutzer sein, der erstellt, importiert, synchronisiert oder zur Microsoft Entra-ID eingeladen wird. Der Microsoft Entra-Benutzer ist möglicherweise nicht mit dem Microsoft-Kontobenutzer für das Azure-Abonnement identisch.

Führen Sie die folgenden Azure CLI-Befehle aus, um den Microsoft Entra-ID-Benutzer als Administrator des Azure SQL-Servers hinzuzufügen.

  1. Verwenden Sie az ad user list diesen Parameterfilterdisplay-nameupn, um die Objekt-ID für den Microsoft Entra ID-Benutzer abzurufen, den Sie zum Administrator machen möchten. Der folgende Befehl listet beispielsweise Informationen für einen Microsoft Entra ID-Benutzer mit dem display-name Nachnamen "Vorname" auf.

    az ad user list --display-name "Firstname Lastname"
    

    Kopieren Sie den id Wert aus der Ausgabe, die im nächsten Schritt verwendet werden soll.

    Tipp

    Sie können eigenständig ausführen az ad user list , um Informationen für alle Benutzer im Microsoft Entra-Verzeichnis anzuzeigen.

  2. Fügen Sie den Microsoft Entra ID-Benutzer mithilfe des object-id Parameters als Administrator auf Ihrem Azure SQL-Server az sql server ad-admin create hinzu. Ersetzen Sie <group-name> im folgenden Befehl den Ressourcengruppennamen <server-name> Des Servers durch den Namen des Servers minus des .database.windows.net Suffixes und <entra-id> durch die id Ausgabe des vorherigen az ad user list Befehls.

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Beschränken Sie die Datenbankserverauthentifizierung nur auf die Microsoft Entra-Authentifizierung. In diesem Schritt wird die SQL-Benutzernamen- und Kennwortauthentifizierung deaktiviert.

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

2. Aktivieren der Microsoft Entra ID-Authentifizierung für Ihre App

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

  1. Wählen Sie auf der Azure-Portalseite für Ihre App unter "Einstellungen" im linken Navigationsmenü die Option "Authentifizierung" aus.

  2. Wählen Sie auf der Seite "Authentifizierung " die Option " Identitätsanbieter hinzufügen" aus, oder wählen Sie " Anbieter hinzufügen " im Abschnitt " Identitätsanbieter " aus.

  3. Wählen Sie auf der Seite " Identitätsanbieter hinzufügen " Microsoft als Anbieter aus.

  4. Wählen Sie für den Ablauf des geheimen Clientschlüssels eine der Dropdownlistenoptionen aus, z. B. empfohlen: 180 Tage.

  5. Behalten Sie alle Standardeinstellungen bei, und wählen Sie "Hinzufügen" aus.

    Screenshot: Seite zum Hinzufügen eines Identitätsanbieters

Hinweis

Wenn Sie die Authentifizierungseinstellungen Ihrer App neu konfigurieren, werden die Token im Tokenspeicher möglicherweise nicht aus den neuen Einstellungen neu generiert. Um sicherzustellen, dass Ihre Token neu generiert werden, melden Sie sich ab und wieder bei Ihrer App an. Eine einfache Methode besteht darin, Ihren Browser im privaten Modus zu verwenden. Schließen Sie den Browser, und öffnen Sie den Browser im privaten Modus, nachdem Sie die Einstellungen in Ihren Apps geändert haben.

3. Konfigurieren des Identitätswechsels von SQL-Datenbankbenutzern

Gewähren Sie Ihrer App Berechtigungen für den Zugriff auf die SQL-Datenbank im Namen des angemeldeten Microsoft Entra-Benutzers.

  1. Wählen Sie auf der Seite " Authentifizierung " der App ihren App-Namen unter "Identitätsanbieter" aus.

    Die App-Registrierungsseite wird geöffnet. Diese Registrierung wurde automatisch generiert, wenn Sie den Microsoft Entra-Anbieter hinzugefügt haben.

  2. Wählen Sie im linken Navigationsmenü die API-Berechtigungen unter "Verwalten" aus.

  3. Wählen Sie auf der Seite "API-Berechtigungen" die Option "Berechtigung hinzufügen" aus.

  4. Wählen Sie auf dem Bildschirm "Api-Berechtigungen anfordern " die Registerkarte "APIs, die meine Organisation verwendet" aus .

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

  6. Wählen Sie unter welchen Berechtigungstyp Ihre Anwendung benötigt, delegierte Berechtigungen aus, und aktivieren Sie dann das Kontrollkästchen neben user_impersonation, und wählen Sie dann "Berechtigungen hinzufügen" aus.

    Screenshot der Seite

Die App-Registrierung in Microsoft Entra verfügt jetzt über die erforderlichen Berechtigungen, um eine Verbindung mit der SQL-Datenbank herzustellen, indem der Identitätswechsel des angemeldeten Benutzers erfolgt.

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

Um Ihre App so zu konfigurieren, dass ein verwendbares Zugriffstoken für DIE SQL-Datenbank bereitgestellt wird, fügen https://database.windows.net/user_impersonation Sie dem Microsoft Entra-Anbieter loginParametersder App hinzuscope. Der folgende Befehl fügt die loginParameters Eigenschaft mit benutzerdefinierten Bereichen zu den Microsoft Entra Identity Provider-Einstellungen hinzu login .

Von den angeforderten Bereichen fordert Der App-Dienst standardmäßig bereits Anopenidprofile, und email Bereiche. Der offline_access Bereich ist enthalten, damit Sie Token aktualisieren können. Weitere Informationen finden Sie unter OpenID Connect-Bereiche.

Der https://database.windows.net/user_impersonation Bereich bezieht sich auf Azure SQL-Datenbank und stellt ein JSON-Webtoken (JWT) bereit, das DIE SQL-Datenbank als Tokenempfänger angibt. Dieser Befehl verwendet jq die JSON-Verarbeitung, die bereits in Cloud Shell installiert ist.

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"

Tipp

Um den erforderlichen Bereich mithilfe einer Webschnittstelle anstelle von Azure CLI zu konfigurieren, verwenden Sie den Microsoft Entra-Anbieter zum Bereitstellen von Aktualisierungstoken, um die angeforderten Bereiche hinzuzufügen https://database.windows.net/user_impersonation .

Ihre App ist jetzt so konfiguriert, dass ein Zugriffstoken generiert wird, das sql-Datenbank akzeptiert.

Hinweis

Zugriffstoken laufen nach einiger Zeit ab. Informationen zum Aktualisieren Ihrer Zugriffstoken, ohne dass Benutzer erneut mit Ihrer App authentifizieren müssen, finden Sie unter Aktualisieren von Authentifizierungstoken.

5. Verwenden des Zugriffstokens in Ihrem Anwendungscode

Aktualisieren Sie Den Anwendungscode, um das zugriffstoken, das von der App Service-Authentifizierung zum Verbindungsobjekt bereitgestellt wird, hinzuzufügen.

Hinweis

Dieser Code funktioniert nicht lokal. Weitere Informationen und Alternativen für das lokale Debuggen finden Sie unter "Lokal debuggen", wenn Sie die App Service-Authentifizierung verwenden.

  1. Ändern Sie in Ihrem DbContext Objekt in DatabaseContext.cs oder einer anderen Datei, die den Datenbankkontext konfiguriert, den Standardkonstruktor, um das Microsoft Entra ID-Zugriffstoken zum Verbindungsobjekt hinzuzufügen.

    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. Wenn Sie über eine Verbindungszeichenfolge verfügen, die in App Service aufgerufen wird defaultConnection , die SQL-Authentifizierung mit einem Benutzernamen und Kennwort verwendet, verwenden Sie den folgenden Befehl, um die geheimen Verbindungsschlüssel zu entfernen. Ersetzen Sie <group-name>, <app-name>, <db-server-name>und <db-name> verwenden Sie Ihre Werte.

    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. Veröffentlichen Ihrer Änderungen

Wenn Sie Visual Studio Code im Browser verwendet haben, um Ihre Codeänderungen in Ihrer GitHub-Verzweigung vorzunehmen, wählen Sie im linken Menü die Quellcodeverwaltung aus. Geben Sie eine Commit-Nachricht wie OBO connect "Commit" ein, und wählen Sie "Commit ausführen" aus.

Der Commit löst eine GitHub Actions-Bereitstellung für App Service aus. Warten Sie einige Minuten, bis die Bereitstellung abgeschlossen ist.

Sie können Ihre Änderungen auch in Git Bash veröffentlichen, indem Sie die folgenden Befehle verwenden:

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

Wenn sich Ihr Code in Visual Studio befindet:

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihr Projekt, und wählen Sie "Veröffentlichen" aus.

    Screenshot: Veröffentlichen über den Projektmappen-Explorer in Visual Studio.

  2. Wählen Sie auf der Seite "Veröffentlichen" die Option "Veröffentlichen" aus.

Wenn die neue App-Seite Ihre App anzeigt, stellt die App eine Verbindung mit der Azure SQL-Datenbank im Namen des angemeldeten Microsoft Entra-Benutzers herstellt. Sie sollten Ihre App wie gewohnt verwenden und bearbeiten können.

Screenshot der Web-App nach der Veröffentlichung.

7. Bereinigen von Ressourcen

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

az group delete --name <group-name>

Dieser Befehl kann einige Zeit dauern, bis er ausgeführt wird.

Häufig gestellte Fragen

Warum erhalte ich einen Fehler "Login failed for user '<token-identified principal>'"?

Die häufigsten Ursachen für einen Login failed for user '<token-identified principal>' Fehler sind:

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

Wenn Sie weitere Benutzer oder Gruppen hinzufügen möchten, stellen Sie eine Verbindung mit Ihrem Datenbankserver mithilfe von sqlcmd oder SQL Server Management Studio (SSMS) her, und erstellen Sie enthaltene Datenbankbenutzer , die Microsoft Entra-Identitäten zugeordnet sind.

Im folgenden Transact-SQL Beispiel wird SQL Server eine Microsoft Entra-Identität hinzugefügt und der Identität 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 die App Service-Authentifizierung ein Azure-Feature ist, funktioniert der Code in diesem Lernprogramm nicht in Ihrer lokalen Umgebung. Im Gegensatz zu einer app, die in Azure ausgeführt wird, profitiert Ihr lokaler Code nicht von der Middleware für die App Service-Authentifizierung. Sie können die folgenden Alternativen für das lokale Debuggen verwenden:

  • Stellen Sie eine Verbindung mit der SQL-Datenbank aus Ihrer lokalen Umgebung mit Authentifizierung her Active Directory Interactive . Dieser Authentifizierungsfluss meldet sich nicht beim Benutzer selbst an, stellt jedoch eine Verbindung mit der Back-End-Datenbank mit dem angemeldeten Benutzer her, damit Sie die Datenbankautorisierung lokal testen können.
  • Kopieren Sie das Zugriffstoken manuell anstelle des X-MS-TOKEN-AAD-ACCESS-TOKEN Anforderungsheaders in Ihren Code.
  • 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 darüber, wie Sie Zugriffstoken aktualisieren können, ohne dass sich Benutzer erneut bei Ihrer App authentifizieren müssen, finden Sie unter Identitätsanbietertoken aktualisieren.