Partager via


Simuler une API CRUD sécurisée avec Microsoft Entra

Lors de la création d’applications, vous interagissez souvent avec les API principales. Parfois, ces API ne sont pas encore disponibles, ou d’autres équipes les mettent à jour pour répondre aux dernières exigences. Pour éviter d’attendre, vous créez généralement une API fictive qui retourne les données dont vous avez besoin. Bien que cette approche vous débloque, il vous oblige à passer du temps à créer une API que vous remplacez par la vraie. Il devient encore plus compliqué quand vous devez sécuriser votre API avec Microsoft Entra. Pour éviter de perdre du temps, vous pouvez utiliser le proxy de développement pour simuler une API CRUD et accélérer le développement.

À l’aide du CrudApiPluginfichier , vous pouvez simuler une API CRUD (Créer, Lire, Mettre à jour, Supprimer) avec un magasin de données en mémoire. À l’aide d’un fichier de configuration simple, vous pouvez définir les URL que votre API fictif prend en charge et les données qu’elle retourne. Le plug-in prend également en charge CORS pour l’utilisation inter-domaines à partir d’applications côté client. Le plug-in prend également en charge l’authentification Microsoft Entra. Vous pouvez donc sécuriser votre API fictif avec Microsoft Entra et implémenter le même flux d’authentification pour votre application que dans votre environnement de production.

Scénario

Supposons que vous créez une application qui permet aux utilisateurs de gérer les clients. Pour obtenir les données, vous devez appeler le /customers point de terminaison de l’API back-end. L’API est sécurisée avec Microsoft Entra. Pour éviter d’attendre que l’équipe back-end termine son travail, vous décidez d’utiliser le proxy de développement pour simuler l’API et retourner les données dont vous avez besoin.

Avant de commencer

Vous commencez par créer une API CRUD simulée avec des données client. Après avoir confirmé que l’API fonctionne, vous pouvez la sécuriser avec Microsoft Entra.

Exemple 1 : Simuler une API CRUD sécurisée avec Microsoft Entra à l’aide d’une seule étendue

Dans le premier exemple, vous sécurisez l’ENSEMBLE de l’API avec une seule étendue. Peu importe si les utilisateurs doivent obtenir des informations sur les clients ou les mettre à jour, ils utilisent la même autorisation.

Dans le customers-api.json fichier, ajoutez des informations sur Entra.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com",
    "scopes": ["api://contoso.com/user_impersonation"]
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

En définissant la auth propriété à entra spécifier, l’API est sécurisée avec Microsoft Entra. Dans la entraAuthConfig propriété, vous spécifiez les détails de configuration. La audience propriété spécifie l’audience de l’API, la issuer propriété spécifie l’émetteur des jetons et la scopes propriété spécifie les étendues requises pour accéder à l’API. Étant donné que vous définissez scopes au niveau racine du fichier API, toutes les actions nécessitent la même étendue.

Si vous essayez d’appeler l’API sans jeton avec l’audience, l’émetteur et les étendues spécifiés, vous obtenez une 401 Unauthorized réponse.

Remarque

À ce stade, le proxy de développement ne valide pas le jeton. Elle vérifie uniquement si le jeton est présent et a l’audience, l’émetteur et les étendues requis. Cela est pratique pendant le développement précoce, lorsque vous n’avez pas encore d’inscription d’application Microsoft Entra et que vous ne pouvez pas obtenir de jeton réel.

Exemple 2 : Simuler une API CRUD sécurisée avec Microsoft Entra à l’aide de différentes étendues pour différentes actions

Dans de nombreux cas, différentes opérations d’API nécessitent des autorisations différentes. Par exemple, l’obtention d’informations sur les clients peut nécessiter une autorisation différente de la mise à jour. Dans cet exemple, vous sécurisez différentes actions d’API avec différentes étendues.

Mettez à jour le customers-api.json fichier comme suit :

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com"
  },
  "actions": [
    {
      "action": "getAll",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "create",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    }
  ]
}

Cette fois, vous ne spécifiez pas le scopes niveau racine du fichier API. Au lieu de cela, vous les spécifiez pour chaque action. De cette façon, vous pouvez sécuriser différentes actions avec différentes étendues. Par exemple, l’obtention d’informations sur les clients nécessite l’étendue, tandis que la api://contoso.com/customer.read mise à jour des clients nécessite l’étendue api://contoso.com/customer.write .

Valider les jetons

Le proxy de développement vous permet de simuler une API CRUD sécurisée avec Microsoft Entra et de vérifier que vous utilisez un jeton valide. La validation du jeton est pratique lorsque vous disposez d’une inscription d’application dans Microsoft Entra, mais que l’équipe crée toujours l’API. Il vous permet de tester plus précisément votre application.

Si vous souhaitez que le proxy de développement valide le jeton d’accès, ajoutez entraAuthConfig la propriété et définissez-la validateSigningKey sur true:

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.19.0/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com",
    "scopes": ["api://contoso.com/user_impersonation"],
    "validateSigningKey": true
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

Si vous essayez d’appeler l’API avec un jeton auto-conçu, vous obtenez une 401 Unauthorized réponse. Le proxy de développement autorise uniquement les requêtes avec un jeton valide émis par Microsoft Entra.

Étape suivante

En savoir plus sur crudApiPlugin.

Exemples

Consultez également les exemples de proxy de développement associés :