Partager via


Configurer l’authentification du simulateur pour les tests locaux

Le fournisseur d’authentification du simulateur vous permet de tester les autorisations basées sur des rôles localement sans configurer un fournisseur d’identité. Utilisez-le pendant le développement pour vérifier que vos règles d’autorisation fonctionnent correctement avant le déploiement en production.

Choisir un fournisseur d’authentification local

Pendant le développement, vous pouvez tester l’authentification et l’autorisation sans configurer un fournisseur d’identité de production.

Provider Idéal pour Remarques
Simulateur Test d’autorisation rapide Développement uniquement. Traite chaque demande comme authentifiée. Par défaut, utilise le rôle Authenticated; peut être remplacé par X-MS-API-ROLE.
AppService Tests pilotés par les exigences Simuler EasyAuth localement en envoyant X-MS-CLIENT-PRINCIPAL avec des revendications personnalisées. Pour plus d’informations, consultez Configurer l’authentification App Service.

Flux d’authentification

Le fournisseur de simulateur traite toutes les demandes comme authentifiées, ce qui vous permet de vous concentrer sur le test des règles d’autorisation :

Illustration du flux d’authentification du simulateur montrant comment les demandes sont automatiquement traitées comme authentifiées.

Phase Que se passe-t-il ?
La demande arrive Le développeur envoie une requête HTTP à DAB
Attribution de rôle DAB affecte le rôle par défaut Authenticated ou celui provenant de l'en-tête X-MS-API-ROLE.
Vérification de l’autorisation DAB évalue la demande par rapport aux autorisations de l’entité pour ce rôle
Exécution des requêtes Si elle est autorisée, DAB interroge la base de données et retourne les résultats

Important

Le fournisseur de simulateurs est destiné au développement uniquement. Ne l’utilisez jamais en production, elle contourne toute authentification réelle.

Prerequisites

  • Interface CLI du générateur d’API de données installée (guide d’installation)
  • Un existant dab-config.json avec au moins une entité

Référence rapide

Réglage Valeur
Provider Simulator
Mode hôte development (requis)
Rôle par défaut Authenticated (injecté automatiquement)
En-tête de remplacement du rôle X-MS-API-ROLE
Jeton requis Non
Prise en charge des revendications Limité (rôles système Anonymous/Authenticated uniquement ; aucune revendication arbitraire)

Étape 1 : Configurer le fournisseur de simulateurs

Définissez le fournisseur d’authentification sur Simulateur et vérifiez que le mode de développement est activé.

Interface de ligne de commande (CLI)

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

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

Configuration résultante

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

Note

Le fournisseur de simulateur fonctionne uniquement lorsque mode est paramétré sur development. En mode de production, DAB rejette le fournisseur du simulateur et ne parvient pas à démarrer.

Étape 2 : Configurer les autorisations d’entité

Définissez les autorisations pour les rôles que vous souhaitez tester. Vous pouvez tester les rôles système (Anonymous, Authenticated) et les rôles personnalisés.

Exemple : Plusieurs rôles

# 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:*"

Configuration résultante

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

Étape 3 : Tester différents rôles

Démarrez le générateur d’API de données et envoyez des demandes pour tester chaque rôle.

dab start

Tester comme authentifié (par défaut)

Sans en-têtes spéciaux, les requêtes sont évaluées en tant que rôle Authenticated :

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

Tester en tant qu'anonyme

Utilisez l’en-tête X-MS-API-ROLE pour tester comme Anonymous.

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

Tester en tant que rôle personnalisé

Utilisez l’en-tête X-MS-API-ROLE pour tester n’importe quel rôle personnalisé :

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

Note

Avec Simulator, les tests de rôle personnalisés fonctionnent, car DAB évalue les autorisations en fonction de la valeur d’en-tête X-MS-API-ROLE . Les rôles système (Anonymous, Authenticated) sont toujours disponibles. Si une demande de rôle personnalisée retourne 403, vérifiez que le nom du rôle correspond exactement à vos autorisations d’entité.

Tester une action qui doit être refusée

Essayez une action pour laquelle le rôle n’est pas autorisé :

# 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"}'

Réponse attendue : 403 Forbidden

Scénarios de test

Utilisez le simulateur pour tester ces scénarios courants :

Scénario Procédure de test
Accès anonyme Définissez X-MS-API-ROLE: Anonymous
Accès authentifié Omettre les en-têtes (par défaut) ou définir X-MS-API-ROLE: Authenticated
Accès aux rôles personnalisés Définissez X-MS-API-ROLE: <role-name>
Action refusée Demander une action pour laquelle le rôle manque de permission
Restrictions de champ Configurer les autorisations au niveau du champ et vérifier les champs de réponse
Rôle manquant Définir X-MS-API-ROLE: nonexistent pour tester la gestion des erreurs

Limites

Le fournisseur de simulateur présente les limitations suivantes :

Limitation Contournement
Aucune revendication personnalisée Utiliser le fournisseur AppService avec l'en-tête X-MS-CLIENT-PRINCIPAL
Aucune stratégie de base de données avec revendications Tester des stratégies à l’aide du fournisseur AppService
Aucune validation de jeton Passer à un fournisseur Entra ou personnalisé pour la production
Mode de développement uniquement Utiliser un fournisseur réel en production

Conseil / Astuce

Si vous devez tester des stratégies de base de données qui utilisent des revendications (comme @claims.userId), utilisez plutôt le fournisseur AppService . Il vous permet de fournir des revendications personnalisées via l’en-tête X-MS-CLIENT-PRINCIPAL .

Transition vers la production

Lorsque vous êtes prêt à déployer, remplacez le fournisseur De simulateur par un fournisseur de production :

  1. Passer mode de development à production
  2. Passez provider de Simulator à votre fournisseur choisi (EntraID/AzureAD, AppService ou Custom)
  3. Configurer les paramètres JWT requis (audience, émetteur)
{
  "runtime": {
    "host": {
      "mode": "production",
      "authentication": {
        "provider": "EntraID",
        "jwt": {
          "audience": "api://<your-app-id>",
          "issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0"
        }
      }
    }
  }
}

Exemple de configuration complet

{
  "$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": ["*"]
        }
      ]
    }
  }
}