Freigeben über


Simulieren einer CRUD-API, die mit Microsoft Entra gesichert ist

Beim Erstellen von Apps interagieren Sie häufig mit Back-End-APIs. Manchmal sind diese APIs noch nicht verfügbar, oder andere Teams aktualisieren sie, um die neuesten Anforderungen zu erfüllen. Um das Warten zu vermeiden, erstellen Sie in der Regel eine simulierte API, die die benötigten Daten zurückgibt. Während dieser Ansatz die Blockierung entsperrt, müssen Sie Zeit für die Erstellung einer API aufwenden, die Sie schließlich durch die echte ersetzen. Es wird noch komplizierter, wenn Sie Ihre API mit Microsoft Entra sichern müssen. Um zeitaufwendige Zeit zu vermeiden, können Sie Dev Proxy verwenden, um eine CRUD-API zu simulieren und die Entwicklung zu beschleunigen.

Mithilfe der CrudApiPlugin-Api können Sie eine CRUD-API (Create, Read, Update, Delete) mit einem Speicher im Arbeitsspeicher simulieren. Mithilfe einer einfachen Konfigurationsdatei können Sie definieren, welche URLs Ihre Simuliert-API unterstützt und welche Daten zurückgegeben werden. Das Plug-In unterstützt auch CORS für die domänenübergreifende Nutzung von clientseitigen Anwendungen. Das Plug-In unterstützt auch die Microsoft Entra-Authentifizierung, sodass Sie Ihre simulierte API mit Microsoft Entra sichern und denselben Authentifizierungsfluss für Ihre App wie in Ihrer Produktionsumgebung implementieren können.

Szenario

Angenommen, Sie erstellen eine App, mit der Benutzer Kunden verwalten können. Um die Daten abzurufen, müssen Sie den /customers Endpunkt der Back-End-API aufrufen. Die API ist mit Microsoft Entra gesichert. Um zu vermeiden, dass das Back-End-Team seine Arbeit abgeschlossen hat, entscheiden Sie sich, dev Proxy zu verwenden, um die API zu simulieren und die benötigten Daten zurückzugeben.

Voraussetzungen

Zunächst erstellen Sie eine simulierte CRUD-API mit Kundendaten. Nachdem Sie bestätigt haben, dass die API funktioniert, können Sie sie mit Microsoft Entra sichern.

Beispiel 1: Simulieren einer CRUD-API, die mit Microsoft Entra gesichert ist, mithilfe eines einzelnen Bereichs

Im ersten Beispiel sichern Sie die gesamte API mit einem einzigen Bereich. Unabhängig davon, ob Benutzer Informationen zu Kunden erhalten oder aktualisieren müssen, verwenden sie dieselbe Berechtigung.

Fügen Sie in der customers-api.json Datei Informationen zu Entra hinzu.

{
  "$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})]"
    }
  ]
}

Durch Festlegen der auth Eigenschaft auf entra Sie geben Sie an, dass die API mit Microsoft Entra gesichert ist. In der entraAuthConfig Eigenschaft geben Sie die Konfigurationsdetails an. Die audience Eigenschaft gibt die Zielgruppe der API an, die issuer Eigenschaft gibt den Aussteller der Token an, und die scopes Eigenschaft gibt die Bereiche an, die für den Zugriff auf die API erforderlich sind. Da Sie auf der Stammebene der API-Datei definieren scopes , benötigen alle Aktionen denselben Bereich.

Wenn Sie versuchen, die API ohne ein Token mit der angegebenen Zielgruppe, dem Aussteller und den Bereichen aufzurufen, erhalten Sie eine 401 Unauthorized Antwort.

Hinweis

In dieser Phase überprüft Dev Proxy das Token nicht. Es überprüft nur, ob das Token vorhanden ist und über die erforderliche Zielgruppe, den Aussteller und bereiche verfügt. Dies ist während der frühen Entwicklung praktisch, wenn Sie noch keine echte Microsoft Entra-App-Registrierung haben und kein echtes Token erhalten können.

Beispiel 2: Simulieren einer CRUD-API, die mit Microsoft Entra gesichert ist, mithilfe verschiedener Bereiche für verschiedene Aktionen

In vielen Fällen erfordern unterschiedliche API-Vorgänge unterschiedliche Berechtigungen. Das Abrufen von Informationen zu Kunden erfordert beispielsweise möglicherweise eine andere Berechtigung als das Aktualisieren. In diesem Beispiel sichern Sie verschiedene API-Aktionen mit unterschiedlichen Bereichen.

Aktualisieren Sie die customers-api.json Datei wie folgt:

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

Dieses Mal geben Sie die scopes Datei nicht auf der Stammebene der API-Datei an. Stattdessen geben Sie sie für jede Aktion an. Auf diese Weise können Sie verschiedene Aktionen mit unterschiedlichen Bereichen sichern. Beispielsweise erfordert das Abrufen von Informationen zu Kunden den api://contoso.com/customer.read Bereich, während beim Aktualisieren von Kunden der api://contoso.com/customer.write Bereich erforderlich ist.

Überprüfen von Token

Mit Dev Proxy können Sie eine CRUD-API simulieren, die mit Microsoft Entra gesichert ist, und überprüfen, ob Sie ein gültiges Token verwenden. Das Überprüfen des Tokens ist praktisch, wenn Sie über eine App-Registrierung in Microsoft Entra verfügen, aber das Team erstellt weiterhin die API. Sie können Ihre App genauer testen.

Wenn Dev Proxy das Zugriffstoken überprüfen soll, fügen Sie die entraAuthConfig validateSigningKey Eigenschaft hinzu, und legen Sie sie auf 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})]"
    }
  ]
}

Wenn Sie versuchen, die API mit einem selbst gestalteten Token aufzurufen, erhalten Sie eine 401 Unauthorized Antwort. Dev Proxy erlaubt nur Anforderungen mit einem gültigen Token, das von Microsoft Entra ausgestellt wurde.

Nächster Schritt

Erfahren Sie mehr über crudApiPlugin.

Beispiele

Siehe auch die zugehörigen Dev Proxy-Beispiele: