Freigeben über


Konfigurieren der Simulatorauthentifizierung für lokale Tests

Mit dem Simulatorauthentifizierungsanbieter können Sie rollenbasierte Berechtigungen lokal testen, ohne einen Identitätsanbieter zu konfigurieren. Verwenden Sie sie während der Entwicklung, um zu überprüfen, ob Ihre Berechtigungsregeln ordnungsgemäß funktionieren, bevor sie in der Produktion bereitgestellt werden.

Auswählen eines lokalen Authentifizierungsanbieters

Während der Entwicklung können Sie die Authentifizierung und Autorisierung testen, ohne einen Produktionsidentitätsanbieter zu konfigurieren.

Provider Am besten geeignet für: Hinweise
Simulator Schnelle Berechtigungstests Nur für Entwicklungszwecke. Behandelt jede Anforderung als authentifiziert. Standardmäßig wird die Authenticated Rolle verwendet; außer Kraft setzen mit X-MS-API-ROLE.
AppService Anspruchsgesteuerte Tests Simulieren Sie EasyAuth lokal, indem Sie mit benutzerdefinierten Ansprüchen senden X-MS-CLIENT-PRINCIPAL . Ausführliche Informationen finden Sie unter Konfigurieren der App Service-Authentifizierung.

Authentifizierungsfluss

Der Simulatoranbieter behandelt alle Anforderungen als authentifiziert, sodass Sie sich auf das Testen von Autorisierungsregeln konzentrieren können:

Abbildung des Simulatorauthentifizierungsflusses, der zeigt, wie Anforderungen automatisch als authentifiziert behandelt werden.

Phase Folge
Anfrage kommt an Entwickler sendet HTTP-Anforderung an DAB
Rollenzuweisung DAB weist Authenticated entweder die Standardrolle oder die Rolle aus dem X-MS-API-ROLE-Header zu.
Prüfung der Berechtigung DAB wertet die Anforderung anhand der Berechtigungen der Entität für diese Rolle aus.
Abfrageausführung Falls zulässig, fragt DAB die Datenbank ab und gibt Ergebnisse zurück.

Von Bedeutung

Der Simulatoranbieter ist nur für die Entwicklung vorgesehen. Verwenden Sie sie niemals in der Produktion – sie umgehen alle echten Authentifizierungen.

Voraussetzungen

  • Installierte CLI des Daten-API-Generators (Installationshandbuch)
  • Eine vorhandene dab-config.json mit mindestens einer Entität

Kurzreferenz

Setting Wert
Provider Simulator
Hostmodus development (erforderlich)
Standardrolle Authenticated (automatisch eingefügt)
Rollen-Überschreibungs-Header X-MS-API-ROLE
Token erforderlich Nein
Anspruchsunterstützung Beschränkt (nur Systemrollen Anonymous/Authenticated ; keine willkürlichen Ansprüche)

Schritt 1: Konfigurieren des Simulatoranbieters

Legen Sie den Authentifizierungsanbieter auf Simulator fest, und stellen Sie sicher, dass der Entwicklungsmodus aktiviert ist.

Befehlszeilenschnittstelle (CLI)

# Enable development mode
dab configure \
  --runtime.host.mode development

# Set the Simulator provider
dab configure \
  --runtime.host.authentication.provider Simulator

Resultierende Konfiguration

{
  "runtime": {
    "host": {
      "mode": "development",
      "authentication": {
        "provider": "Simulator"
      }
    }
  }
}

Hinweis

Der Simulatoranbieter funktioniert nur, wenn mode auf development gesetzt ist. Im Produktionsmodus lehnt DAB den Simulatoranbieter ab und kann nicht gestartet werden.

Schritt 2: Konfigurieren von Entitätsberechtigungen

Definieren Sie Berechtigungen für die Rollen, die Sie testen möchten. Sie können Systemrollen (Anonymous, Authenticated) und benutzerdefinierte Rollen testen.

Beispiel: Mehrere Rollen

# Allow anonymous read access
dab update Book \
  --permissions "Anonymous:read"

# Allow authenticated users full read access
dab update Book \
  --permissions "Authenticated:read"

# Allow authors to create and update
dab update Book \
  --permissions "author:create,read,update"

# Allow admins full access
dab update Book \
  --permissions "admin:*"

Resultierende Konfiguration

{
  "entities": {
    "Book": {
      "source": "dbo.Books",
      "permissions": [
        {
          "role": "Anonymous",
          "actions": ["read"]
        },
        {
          "role": "Authenticated",
          "actions": ["read"]
        },
        {
          "role": "author",
          "actions": ["create", "read", "update"]
        },
        {
          "role": "admin",
          "actions": ["*"]
        }
      ]
    }
  }
}

Schritt 3: Testen verschiedener Rollen

Starten Sie den Daten-API-Generator, und senden Sie Anforderungen, um jede Rolle zu testen.

dab start

Als authentifiziert testen (Standard)

Ohne spezielle Header werden Anfragen als die Authenticated-Rolle ausgewertet:

curl -X GET "http://localhost:5000/api/Book"

Als anonym testen

Verwenden Sie die X-MS-API-ROLE Kopfzeile zum Testen als Anonymous:

curl -X GET "http://localhost:5000/api/Book" \
  -H "X-MS-API-ROLE: Anonymous"

Als benutzerdefinierte Rolle testen

Verwenden Sie den X-MS-API-ROLE Header, um eine benutzerdefinierte Rolle zu testen:

curl -X GET "http://localhost:5000/api/Book" \
  -H "X-MS-API-ROLE: author"

Hinweis

Mit Simulator funktioniert das testen benutzerdefinierter Rollen, da DAB Berechtigungen basierend auf dem X-MS-API-ROLE Headerwert auswertet. Systemrollen (Anonymous, Authenticated) sind immer verfügbar. Wenn eine benutzerdefinierte Rollenanforderung 403 zurückgibt, überprüfen Sie, ob der Rollenname ihren Entitätsberechtigungen genau entspricht.

Testen einer Aktion, die verweigert werden soll

Probieren Sie eine Aktion aus, für die die Rolle nicht über die erforderlichen Berechtigungen verfügt:

# This should fail—Anonymous can only read
curl -X POST "http://localhost:5000/api/Book" \
  -H "X-MS-API-ROLE: Anonymous" \
  -H "Content-Type: application/json" \
  -d '{"title": "New Book", "author": "Test"}'

Erwartete Antwort: 403 Forbidden

Testszenarien

Verwenden Sie den Simulator, um die folgenden gängigen Szenarien zu testen:

Scenario Testen
Anonymer Zugriff Legen Sie X-MS-API-ROLE: Anonymous fest.
Authentifizierter Zugriff Kopfzeilen weglassen (Standard) oder X-MS-API-ROLE: Authenticated festlegen
Benutzerdefinierter Rollenzugriff Legen Sie X-MS-API-ROLE: <role-name> fest.
Aktion verweigert Anfordern einer Aktion, für die die Rolle keine Berechtigung hat
Feldeinschränkungen Konfigurieren von Berechtigungen auf Feldebene und Überprüfen von Antwortfeldern
Fehlende Rolle Setzen Sie X-MS-API-ROLE: nonexistent , um die Fehlerbehandlung zu testen

Einschränkungen

Der Simulatoranbieter hat folgende Einschränkungen:

Einschränkung Zwischenlösung
Keine benutzerdefinierten Ansprüche Verwenden Sie den AppService-Anbieter mit der X-MS-CLIENT-PRINCIPAL-Kopfzeile.
Keine Datenbankrichtlinien mit Ansprüchen Testen von Richtlinien mithilfe des AppService-Anbieters
Keine Tokenvalidierung Wechseln zu Entra oder benutzerdefiniertem Anbieter für die Produktion
Nur Entwicklungsmodus Verwenden eines echten Anbieters in der Produktion

Tipp

Wenn Sie Datenbankrichtlinien testen müssen, die Claims verwenden (wie @claims.userId), verwenden Sie stattdessen den AppService-Anbieter. Sie können benutzerdefinierte Ansprüche über den X-MS-CLIENT-PRINCIPAL Header bereitstellen.

Übergang zur Produktion

Wenn Sie bereit für die Bereitstellung sind, ersetzen Sie den Simulatoranbieter durch einen Produktionsanbieter:

  1. Wechseln mode von development zu production
  2. Wechseln provider von Simulator zu Ihrem ausgewählten Anbieter (EntraID/AzureAD, AppServiceoder )Custom
  3. Konfigurieren der erforderlichen JWT-Einstellungen (Zielgruppe, Aussteller)
{
  "runtime": {
    "host": {
      "mode": "production",
      "authentication": {
        "provider": "EntraID",
        "jwt": {
          "audience": "api://<your-app-id>",
          "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
        }
      }
    }
  }
}

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=localhost;Database=Library;Trusted_Connection=true;TrustServerCertificate=true;"
  },
  "runtime": {
    "host": {
      "mode": "development",
      "authentication": {
        "provider": "Simulator"
      }
    }
  },
  "entities": {
    "Book": {
      "source": "dbo.Books",
      "permissions": [
        {
          "role": "Anonymous",
          "actions": ["read"]
        },
        {
          "role": "Authenticated",
          "actions": ["read"]
        },
        {
          "role": "author",
          "actions": ["create", "read", "update"]
        },
        {
          "role": "admin",
          "actions": ["*"]
        }
      ]
    }
  }
}