Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
| 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.jsonmit 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:
- Wechseln
modevondevelopmentzuproduction - Wechseln
providervonSimulatorzu Ihrem ausgewählten Anbieter (EntraID/AzureAD,AppServiceoder )Custom - 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": ["*"]
}
]
}
}
}