Freigeben über


Konfigurieren Microsoft Entra ID Authentifizierung

Dieses Handbuch führt Sie durch das Konfigurieren der Microsoft Entra ID-Authentifizierung (vormals Azure Active Directory) für den Daten-API-Generator. Am Ende authentifiziert Ihre Client-App Benutzer über Entra, erwirbt Token für den Daten-API-Generator, und DAB kann verwaltete Identität verwenden, um eine Verbindung mit Azure SQL herzustellen.

Der Daten-API-Generator authentifiziert eingehende Anforderungen entweder mithilfe der JSON Web Token(JWT)-Bearerüberprüfung () oder plattformbezogener Identitätsheader (). Verwenden Sie für lokale Entwicklungs- und Berechtigungstests den Anbieter.

Abbildung der Authentifizierung von Clients beim Daten-API-Generator mithilfe von JWT-Token.

Guides des Authentifizierungsanbieters

Wählen Sie einen Leitfaden basierend auf Ihrem Identitätsanbieter aus:

Provider Guide
Microsoft Entra ID Dieser Artikel
Okta, Auth0 oder andere Konfigurieren der benutzerdefinierten JWT-Authentifizierung
Azure App Service Konfigurieren Sie die App Service Authentifizierung
Lokale Tests Konfigurieren der Simulatorauthentifizierung

Authentifizierungsfluss

Der Fluss weist drei verschiedene Phasen auf:

Phase Description
Benutzerauthentifizierung Benutzer meldet sich über Ihre Client-App mit Microsoft Entra ID an.
Clientauthentifizierung Client-App erwirbt ein DAB-bezogenes Token und ruft den Data-API-Builder auf.
Datenbankzugriff Der Daten-API-Generator überprüft das Token und stellt dann mithilfe einer eigenen Identität (verwaltete Identität oder connection string Anmeldeinformationen) eine Verbindung mit der Datenbank bereit.

Von Bedeutung

Der Daten-API-Generator überprüft das eingehende Benutzertoken für die API-Authentifizierung, stellt jedoch eine Verbindung mit der Datenbank mithilfe eigener Anmeldeinformationen (verwaltete Identität oder SQL-Authentifizierung) bereit. DAB führt keinen On-Behalf-Of(OBO)-Token-Austausch durch, um auf die Datenbank im Auftrag des aufrufenden Benutzers zuzugreifen.

Voraussetzungen

  • Ein Azure-Abonnement mit einem Microsoft Entra ID Mandant
  • Installierte CLI des Daten-API-Generators (Installationshandbuch)
  • Eine vorhandene mit mindestens einer Entität
  • (Optional) Azure SQL Database für Szenarien mit verwalteter Identität

Kurzreferenz

Setting Wert
Provider (oder aus Kompatibilitätsgründen)
Erforderlich für die Überprüfung , , gültige Signatur
Erforderlich für die Autorisierung Anspruchsrecht (nur bei der Verwendung benutzerdefinierter Rollen)
Ausstellerformat https://login.microsoftonline.com/<tenant-id>/v2.0
Zielgruppenformat oder benutzerdefinierter Anwendungs-ID-URI
Standardrolle Authenticated
Benutzerdefinierte Rollenüberschrift X-MS-API-ROLE
Rollenanspruchstyp (behoben, nicht konfigurierbar)

Hinweis

Wenn Sie oder als Anbieter verwenden, ermöglicht DAB eine zusätzliche Signaturschlüsselherausgeberüberprüfung speziell für Microsoft Entra Token. Diese Überprüfung bietet eine stärkere Sicherheit im Vergleich zum generischen Anbieter.

Schritt 1: Registrieren einer Anwendung in Microsoft Entra ID

Erstellen Sie eine App-Registrierung, die Ihre Daten-API-Generator-API darstellt. Client-Apps fordern Token mit einer Zielgruppe an, die dieser Registrierung entspricht.

  1. Melden Sie sich beim Microsoft Entra Admin Center an.

  2. Navigieren Sie zu Identity>Applications>App registrations.

  3. Wählen Sie Neue Registrierung aus.

  4. Geben Sie einen Namen ein (z. B . ).

  5. Wählen Sie die entsprechenden unterstützten Kontotypen für Ihr Szenario aus:

    • Einzelner Mandant: Nur Benutzer in Ihrer Organisation
    • Multitenant: Benutzer in einem beliebigen Microsoft Entra Verzeichnis
  6. Lassen Sie den Umleitungs-URI leer (diese Registrierung gilt für die API, nicht für den Client).

  7. Wählen Sie Registrieren aus.

  8. Notieren Sie sich auf der Seite "Übersicht" der App die folgenden Werte:

    Wert Wo sie zu finden ist Syntaxelemente
    Anwendungs-ID (Client) Seite „Übersicht“ Erstellung der Nutzergruppe-URI
    Verzeichnis-ID (Mandant) Seite „Übersicht“ Erstellen der Aussteller-URL

Konfigurieren der Anwendungs-ID-URI

  1. Wechseln Sie in der App-Registrierung zu "Verfügbarmachen einer API".

  2. Wählen Sie neben Anwendungs-ID-URI die Option Hinzufügen aus.

  3. Übernehmen Sie den Standardwert () oder geben Sie einen benutzerdefinierten URI ein.

  4. Wählen Sie Speichern aus.

Tipp

Der Anwendungs-ID-URI wird zum Wert in Ihrer DAB-Konfiguration. Verwenden Sie ein einheitliches Format in allen Umgebungen.

Hinzufügen eines Geltungsbereichs

Ein Berechtigungsbereich ist erforderlich, damit Clientanwendungen (einschließlich Azure CLI) delegierte Zugriffstoken für Ihre API anfordern können.

  1. Wechseln Sie in der App-Registrierung zu "Verfügbarmachen einer API".

  2. Wählen Sie unter Durch diese API definierte Bereiche die Option Bereich hinzufügen aus.

  3. Geben Sie Folgendes ein:

    • Scope-Name: Endpoint.Access
    • Zum Einwilligen berechtigte Personen: Administratoren und Benutzer
    • Anzeigename der Administratoreinwilligung:
    • Beschreibung der Administratoreinwilligung:
    • Anzeigename der Benutzereinwilligung:
    • Beschreibung der Benutzereinwilligung:
    • Status:Aktiviert
  4. Wählen Sie "Bereich hinzufügen" aus.

Hinweis

Der vollständige Bereichswert ist api://<app-id>/Endpoint.Access. Clientanwendungen verwenden diesen Wert beim Anfordern von Token.

Hinzufügen von App-Rollen (optional)

Wenn Sie benutzerdefinierte Rollen über folgendes hinaus verwenden möchten:

  1. Wechseln Sie zu App-Rollen.

  2. Wählen Sie " App-Rolle erstellen" aus.

  3. Geben Sie Folgendes ein:

    • Anzeigename:
    • Zulässige Mitgliedertypen: Benutzer/Gruppen oder beides
    • Wert: (dieser Wert wird im Anspruch des Tokens angezeigt)
    • Description: Read-only access to data
  4. Wählen Sie Apply aus.

  5. Wiederholen Sie diesen Vorgang für weitere Rollen (z. B . , ).

Festlegen der Manifesttokenversion

Standardmäßig wird das App-Registrierungsmanifest auf v1.0-Token festgelegt. V1-Token verwenden ein anderes Ausstellerformat (https://sts.windows.net/<tenant-id>/) als der in DAB konfigurierte v2.0-Aussteller, wodurch die Tokenüberprüfung fehlschlägt.

  1. Wechseln Sie in der App-Registrierung zu "Manifest".

  2. Suchen Sie und ändern Sie den Wert in .

  3. Wählen Sie Speichern aus.

Von Bedeutung

Wenn [Bedingung] eintritt oder [eine andere Bedingung], stimmt der Anspruch im Token nicht mit der in DAB konfigurierten v2.0-Aussteller-URL überein, und alle Anforderungen schlagen mit [Fehlermeldung] fehl.

Benutzer zu App-Rollen zuweisen

Durch das Erstellen von App-Rollen werden diese nicht automatisch den Benutzern zugewiesen. Sie müssen Benutzer oder Gruppen über die Enterprise-Anwendung zuweisen.

  1. Navigieren Sie im Microsoft Entra Admin Center zu IdentityApplicationsEnterprise-Anwendungen.

  2. Suchen und wählen Sie Ihre Anwendung aus (z. B.). Eine Unternehmensanwendung wurde automatisch erstellt, wenn Sie die App registriert haben.

  3. Wechseln Sie zu "Benutzer und Gruppen".

  4. Wählen Sie Benutzer/Gruppe hinzufügen aus.

  5. Wählen Sie unter "Benutzer" das Benutzerkonto aus, das Zugewiesen werden soll, und wählen Sie "Auswählen" aus.

  6. Wählen Sie unter "Rolle auswählen" die Rolle aus, die zugewiesen werden soll (z. B. ). Wenn Ihre Rolle nicht angezeigt wird, haben Sie bitte etwas Geduld und warten einige Minuten, bis die Replikation von Microsoft Entra abgeschlossen ist.

  7. Wählen Sie Zuweisen aus.

  8. Wiederholen Sie diesen Vorgang für jede Rolle, die Sie zuweisen möchten.

Hinweis

Ohne Rollenzuweisung ist der im Token des Benutzers leer, und Anfragen, die mit einer verwendet werden, werden mit .

Schritt 2: Konfigurieren des Daten-API-Generators

Konfigurieren Sie DAB, um token zu überprüfen, die von Ihrem Entra-Mandanten für Ihre API-Zielgruppe ausgestellt wurden.

Befehlszeilenschnittstelle (CLI)

  • Bash
  • Eingabeaufforderung
# Set the authentication provider
dab configure \
  --runtime.host.authentication.provider EntraID

# Set the expected audience (Application ID URI)
dab configure \
  --runtime.host.authentication.jwt.audience "api://<your-app-id>"

# Set the expected issuer (your tenant)
dab configure \
  --runtime.host.authentication.jwt.issuer "https://login.microsoftonline.com/<your-tenant-id>/v2.0"

Resultierende Konfiguration

{
  "runtime": {
    "host": {
      "authentication": {
        "provider": "EntraID",
        "jwt": {
          "audience": "api://<your-app-id>",
          "issuer": "https://login.microsoftonline.com/<your-tenant-id>/v2.0"
        }
      }
    }
  }
}

Schritt 3: Konfigurieren von Entitätsberechtigungen

Definieren Sie, welche Rollen auf jede Entität zugreifen können. Anforderungen werden anhand der vom Token ermittelten Rolle ausgewertet.

Gewährung von Zugriff für authentifizierte Benutzer

  • Bash
  • Eingabeaufforderung
dab update Book \
  --permissions "Authenticated:read"

Zugriff auf eine benutzerdefinierte Rolle gewähren

  • Bash
  • Eingabeaufforderung
dab update Book \
  --permissions "reader:read" \
  --permissions "writer:create,read,update"

Resultierende Konfiguration

{
  "entities": {
    "Book": {
      "source": "dbo.Books",
      "permissions": [
        {
          "role": "Authenticated",
          "actions": ["read"]
        },
        {
          "role": "reader",
          "actions": ["read"]
        },
        {
          "role": "writer",
          "actions": ["create", "read", "update"]
        }
      ]
    }
  }
}

Schritt 4: Konfigurieren der Datenbankverbindung

Der Daten-API-Generator stellt eine Verbindung mit der Datenbank mithilfe einer eigenen Identität her, getrennt vom authentifizierten Benutzer. Verwenden Sie für Produktionsszenarien mit Azure SQL verwaltete Identität.

Hinweis

Die Datenbankverbindung verwendet die Dienstidentität von DAB (verwaltete Identität oder SQL-Anmeldeinformationen), nicht die Identität des aufrufenden Benutzers. DAB übergibt keine Benutzertoken an die Datenbank.

Vom System zugewiesene verwaltete Identität

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "Server=tcp:<server>.database.windows.net,1433;Initial Catalog=<database>;Authentication=Active Directory Managed Identity;Encrypt=True;"
  }
}

Vom Benutzer zugewiesene verwaltete Identität

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "Server=tcp:<server>.database.windows.net,1433;Initial Catalog=<database>;Authentication=Active Directory Managed Identity;User Id=<uami-client-id>;Encrypt=True;"
  }
}

Option B: SQL-Authentifizierung (Entwicklung)

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "@env('SQL_CONNECTION_STRING')"
  }
}

Von Bedeutung

Verbindungszeichenfolgen mit Kennwörtern für die Quellcodeverwaltung niemals übernehmen. Verwenden Sie Umgebungsvariablen oder Azure Key Vault.

Option C: Lokale Entwicklung mit

Verwenden Sie für die lokale Entwicklung gegen Azure SQL Ihre Azure CLI Anmeldeinformationen:

{
  "data-source": {
    "database-type": "mssql",
    "connection-string": "Server=tcp:<server>.database.windows.net,1433;Initial Catalog=<database>;Authentication=Active Directory Default;Encrypt=True;"
  }
}

Melden Sie sich vor dem Starten von DAB an:

az login

Schritt 5: Testen der Konfiguration

Autorisieren von Azure CLI als Clientanwendung

Bevor Azure CLI Token für Ihre API abrufen können, müssen Sie sie als autorisierte Clientanwendung hinzufügen.

  1. Wechseln Sie in der App-Registrierung zu "Verfügbarmachen einer API".

  2. Wählen Sie unter Autorisierte Clientanwendungen die Option Eine Clientanwendung hinzufügen aus.

  3. Geben Sie die Azure CLI Client-ID ein: 00001111-aaaa-2222-bbbb-3333cccc4444.

  4. Wählen Sie den Bereich api://<app-id>/Endpoint.Access aus.

  5. Wählen Sie "Anwendung hinzufügen" aus.

Token mit Azure CLI abrufen

Melden Sie sich bei Azure CLI an, und legen Sie den Mandanten fest, in dem Ihre App-Registrierung vorhanden ist:

az login
az account set --tenant <your-tenant-id>

Fordern Sie ein Token an, das auf Ihre API abgestimmt ist.

az account get-access-token --scope api://<your-app-id>/Endpoint.Access --query "accessToken" -o tsv

Hinweis

Wenn Sie einen AADSTS65001 Zustimmungsfehler erhalten haben, überprüfen Sie, ob Sie die Azure CLI Client-ID (00001111-aaaa-2222-bbbb-3333cccc4444) als autorisierte Clientanwendung im vorherigen Schritt hinzugefügt haben.

Sie können das Token bei jwt.ms überprüfen, um die Ansprüche zu überprüfen.

Starten von DAB und Senden einer Anforderung

  1. Starten des Daten-API-Generators:

    dab start
    
  2. Rufen Sie die API mit dem Token auf:

    curl -X GET "http://localhost:5000/api/Book" \
      -H "Authorization: Bearer <your-token>"
    
  3. Um eine benutzerdefinierte Rolle zu verwenden, schließen Sie die Kopfzeile ein:

    curl -X GET "http://localhost:5000/api/Book" \
      -H "Authorization: Bearer <your-token>" \
      -H "X-MS-API-ROLE: reader"
    

Hinweis

Die im angegebene Rolle muss im Anspruch des Tokens enthalten sein. Wenn sich die Rolle nicht im Token befindet, wird die Anforderung abgelehnt.

Rollenauswahlverhalten

Der Daten-API-Generator bestimmt die Rolle der Anforderung mithilfe dieser Logik:

Token vorhanden? X-MS-API-ROLE Header? Rolle im Token? Ergebnis
Nein Nein Anonymous
Ja (gültig) Nein Authenticated
Ja (gültig) Yes Nein Abgelehnt (403 Verboten)
Ja (gültig) Yes Yes Kopfzeilenwert
Ja (ungültig) Abgelehnt (401 Nicht autorisiert)

Problembehandlung

Symptom Mögliche Ursache Lösung
401 Unauthorized Token abgelaufen oder falsch formatiert Einen neuen Token abrufen; Token bei jwt.ms überprüfen.
401 Unauthorized Benutzergruppenkonflikt Überprüfen, ob mit dem Anspruch des Tokens übereinstimmt
401 Unauthorized Ausstellerkonflikt Überprüfen Sie, ob der Anspruch des Tokens exakt mit übereinstimmt.
403 Forbidden Rolle nicht im Token Stellen Sie sicher, dass der Benutzer der App-Rolle in Entra zugewiesen ist.
403 Forbidden Keine Berechtigungen für die Rolle Hinzufügen der Rolle zum Array der Entität

Vollständiges Konfigurationsbeispiel

{
  "$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
  "data-source": {
    "database-type": "mssql",
    "connection-string": "Server=tcp:myserver.database.windows.net,1433;Initial Catalog=mydb;Authentication=Active Directory Managed Identity;Encrypt=True;"
  },
  "runtime": {
    "host": {
      "authentication": {
        "provider": "EntraID",
        "jwt": {
          "audience": "api://dab-api-12345678",
          "issuer": "https://login.microsoftonline.com/contoso.onmicrosoft.com/v2.0"
        }
      }
    }
  },
  "entities": {
    "Book": {
      "source": "dbo.Books",
      "permissions": [
        {
          "role": "Authenticated",
          "actions": ["read"]
        },
        {
          "role": "librarian",
          "actions": ["create", "read", "update", "delete"]
        }
      ]
    }
  }
}