Partager via


Sécuriser votre solution de générateur d’API de données

Le générateur d’API de données expose vos données via des points de terminaison REST et GraphQL. La sécurisation de votre API nécessite une attention à trois domaines principaux : l’authentification (qui appelle ?), l’autorisation (qu’est-ce qu’elles peuvent faire ?) et la sécurité du transport (la connexion est-elle protégée ?).

Illustration du flux de demande de bout en bout montrant l’authentification, l’autorisation et l’accès à la base de données.

Trois piliers de la sécurité

Pilier Question à laquelle il répond Concept clé
Authentification Qui est l’appelant ? Valider les jetons d’un fournisseur d’identité
Autorisation Qu’est-ce qu’ils peuvent faire ? Autorisations basées sur des rôles sur les entités
Transport La connexion est-elle sécurisée ? Chiffrement TLS pour tout le trafic

Choisir votre fournisseur d’authentification

Le générateur d’API de données prend en charge plusieurs fournisseurs d’authentification. Choisissez celui qui correspond à votre scénario de déploiement :

Provider Cas d’utilisation Guide
Microsoft Entra ID (EntraID/AzureAD) Applications de production utilisant l’identité Microsoft Configurer l’authentification Entra
JWT personnalisé Fournisseurs d’identité tiers (Okta, Auth0, Keycloak) Configurer l’authentification JWT personnalisée
App Service Applications s’exécutant derrière Azure App Service EasyAuth (en-têtes de plateforme) Configurer l’authentification App Service
Simulateur Développement et test locaux Configurer l’authentification du simulateur
Static Web Apps Applications protégées par des en-têtes d’authentification SWA Configurer l’authentification App Service

Conseil / Astuce

Commencez par le fournisseur de simulateur pendant le développement pour tester les autorisations sans configurer un fournisseur d’identité. Basculez vers un fournisseur de production avant le déploiement.

Authentification

L’authentification vérifie l’identité de l’appelant. Le générateur d’API de données authentifie les demandes en validant les jetons du porteur JWT (EntraID/AzureAD, Custom) ou en faisant confiance aux en-têtes d’identité fournis par la plateforme (AppService, ). StaticWebApps Simulator ignore la validation externe pour le développement.

Illustration de la façon dont les clients s’authentifient auprès du générateur d’API de données à l’aide de jetons JWT.

Fonctionnement

  1. Pour les fournisseurs JWT, le client acquiert un jeton auprès du fournisseur d’identité
  2. Le client envoie le jeton dans l’en-tête Authorization: Bearer <token> (fournisseurs JWT) ou la plateforme injecte des en-têtes d’identité (EasyAuth/SWA)
  3. Le générateur d’API de données valide le jeton ou l’en-tête de plateforme (émetteur, audience, signature pour les fournisseurs JWT)
  4. DAB extrait les rôles de l’utilisateur à partir du jeton ou de l’en-tête d’identité

Référence rapide

Réglage Descriptif
runtime.host.authentication.provider Fournisseur d’authentification (EntraID/AzureAD, , CustomAppService, StaticWebApps, ) Simulator
runtime.host.authentication.jwt.audience Revendication d’audience attendue pour les fournisseurs JWT (non utilisé par AppService/StaticWebApps/Simulator)
runtime.host.authentication.jwt.issuer Émetteur/autorité attendu pour les fournisseurs JWT (non utilisés par AppService/StaticWebApps/Simulator)

Pour obtenir une configuration détaillée, consultez Configurer l’authentification Microsoft Entra ID.

Autorisation

L’autorisation détermine ce qu’un utilisateur authentifié (ou anonyme) peut faire. Le générateur d’API de données utilise le contrôle d’accès en fonction du rôle (RBAC) pour restreindre l’accès aux entités et aux actions.

Illustration de la façon dont le générateur d’API de données sélectionne un rôle et évalue les autorisations d’une demande.

Fonctionnement

  1. DAB attribue un rôle à la requête en fonction du jeton et des en-têtes
  2. DAB recherche les autorisations de l’entité pour ce rôle
  3. Si le rôle dispose d’une autorisation pour l’action demandée, DAB exécute la requête
  4. Si ce n’est pas le cas, DAB retourne une 403 Forbidden réponse

Rôles système et rôles d’utilisateur

Type de rôle Descriptif
Anonymous Affecté lorsqu’aucune identité authentifiée n’est présente
Authenticated Affecté lorsqu’une demande est authentifiée (en-tête de plateforme acceptée ou approuvée JWT) et qu’aucun rôle d’utilisateur spécifique n’est sélectionné
Rôles d’utilisateur Rôles personnalisés à partir de la revendication du jeton (ou rôles de roles plateforme), sélectionnés via l’en-tête X-MS-API-ROLE

Sécurisé par défaut

Les entités n’ont pas d’autorisations par défaut. Vous devez accorder explicitement l’accès :

{
  "entities": {
    "Book": {
      "permissions": [
        { "role": "authenticated", "actions": ["read"] }
      ]
    }
  }
}

Pour obtenir une configuration détaillée, consultez Autorisation et rôles.

Sécurité au niveau des lignes et au niveau du champ

Dépassez les autorisations au niveau de l’entité avec un contrôle d’accès précis :

Caractéristique Descriptif Guide
Stratégies de base de données (sécurité au niveau des lignes) Traduire des expressions de stratégie en prédicats de requête qui filtrent les lignes en fonction des revendications ou du contexte de session Implémenter la sécurité au niveau des lignes
Sécurité au niveau des champs Inclure ou exclure des colonnes spécifiques par rôle Accès aux champs

Sécurité du transport et de la configuration

Sécurité du transport

  • Utiliser TLS pour toutes les connexions : chiffrer le trafic entre les clients et DAB
  • Désactiver les versions TLS héritées : reposez uniquement sur TLS 1.2+
  • Utiliser des points de terminaison HTTPS : n’exposez jamais DAB sur http non chiffré en production

Pour plus d’informations, consultez les meilleures pratiques de sécurité.

Sécurité de la configuration

  • Stocker des secrets dans des variables d’environnement : utiliser @env('SECRET_NAME') dans votre configuration
  • Utiliser Azure Key Vault : Référencer des secrets avec @azure('key-vault-uri')
  • Ne jamais valider les secrets : ne pas avoir dab-config.json de mots de passe et de chaînes de connexion
{
  "data-source": {
    "connection-string": "@env('SQL_CONNECTION_STRING')"
  }
}

Surveillance et mises à jour

  • Surveiller l’accès : Utiliser Application Insights pour suivre les demandes et détecter les anomalies
  • Examiner les journaux d’activité : rechercher les tentatives d’authentification ayant échoué et les refus d’autorisation
  • Maintenir la mise à jour de DAB : appliquer des correctifs de sécurité en effectuant une mise à niveau vers la dernière version

Guides de démarrage rapide

Tâche Guide
Configurer l’authentification Microsoft Entra ID Configurer l’authentification Entra
Utiliser Okta ou Auth0 Configurer l’authentification JWT personnalisée
Exécuter derrière Azure App Service Configurer l’authentification App Service
Tester les autorisations localement Configurer l’authentification du simulateur
Restreindre les lignes par utilisateur Implémenter la sécurité au niveau des lignes
Comprendre l’attribution de rôle Autorisation et rôles