Sdílet prostřednictvím


Simulace rozhraní CRUD API zabezpečeného pomocí Microsoft Entra

Při vytváření aplikací často komunikujete s back-endovými rozhraními API. V některých případech tato rozhraní API ještě nejsou dostupná nebo je ostatní týmy aktualizují tak, aby splňovaly nejnovější požadavky. Abyste se vyhnuli čekání, obvykle vytvoříte napodobené rozhraní API, které vrací potřebná data. I když vás tento přístup odblokuje, vyžaduje, abyste strávili čas vytvořením rozhraní API, které nakonec nahradíte skutečným rozhraním API. To je ještě složitější, když potřebujete zabezpečit rozhraní API s Microsoft Entra. Abyste se vyhnuli plýtvání časem, můžete pomocí Dev Proxy simulovat rozhraní CRUD API a urychlit vývoj.

Pomocí rozhraní CrudApiPluginAPI CRUD (vytvoření, čtení, aktualizace, odstranění) můžete simulovat úložiště dat v paměti. Pomocí jednoduchého konfiguračního souboru můžete definovat, které adresy URL vaše napodobené rozhraní API podporuje a jaká data vrací. Plug-in také podporuje CORS pro cross-domain použití z klientských aplikací. Modul plug-in také podporuje ověřování Microsoft Entra, takže můžete zabezpečit napodobení rozhraní API pomocí Microsoft Entra a implementovat stejný tok ověřování pro vaši aplikaci jako v produkčním prostředí.

Scénář

Řekněme, že vytváříte aplikaci, která uživatelům umožňuje spravovat zákazníky. Pokud chcete získat data, musíte volat /customers koncový bod back-endového rozhraní API. Rozhraní API je zabezpečené pomocí Microsoft Entra. Abyste se vyhnuli čekání na dokončení práce back-endového týmu, rozhodnete se pomocí dev proxy serveru simulovat rozhraní API a vrátit potřebná data.

Než začnete

Začnete vytvořením simulovaného rozhraní CRUD API s daty zákazníků. Po potvrzení, že rozhraní API funguje, můžete ho zabezpečit pomocí Microsoft Entra.

Příklad 1: Simulovat rozhraní CRUD API zabezpečené pomocí Microsoft Entra s jediným oborem

V prvním příkladu zabezpečíte celé rozhraní API s jedním oborem. Bez ohledu na to, jestli uživatelé potřebují získat informace o zákaznících nebo je aktualizovat, používají stejné oprávnění.

V souboru customers-api.json přidejte informace o Entra.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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})]"
    }
  ]
}

Nastavením vlastnosti auth na entra určíte, že rozhraní API je zabezpečené pomocí Microsoft Entra. entraAuthConfig Ve vlastnosti zadáte podrobnosti konfigurace. Vlastnost audience určuje cílovou skupinu rozhraní API, issuer vlastnost určuje vystavitele tokenů a scopes vlastnost určuje rozsahy potřebné pro přístup k rozhraní API. Vzhledem k tomu, že definujete scopes na kořenové úrovni souboru rozhraní API, všechny akce vyžadují stejný obor.

Pokud se pokusíte volat rozhraní API bez tokenu se zadanou cílovou skupinou, vystavitelem a obory, získáte 401 Unauthorized odpověď.

Poznámka:

V této fázi dev proxy neověřuje token. Kontroluje pouze, jestli je token přítomný a má požadovanou cílovou skupinu, vydavatele a rozsahy. To je praktické během raného vývoje, když ještě nemáte skutečnou registraci aplikace Microsoft Entra a nemůžete získat skutečný token.

Příklad 2: Simulace rozhraní CRUD API zabezpečeného pomocí Microsoft Entra s využitím různých oborů pro různé akce

V mnoha případech vyžadují různé operace rozhraní API různá oprávnění. Získání informací o zákaznících může například vyžadovat jiné oprávnění než jejich aktualizace. V tomto příkladu zabezpečíte různé akce rozhraní API s různými obory.

customers-api.json Aktualizujte soubor následujícím způsobem:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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"]
      }
    }
  ]
}

Tentokrát neuvedete scopes na kořenové úrovni souboru rozhraní API. Místo toho je zadáte pro každou akci. Tímto způsobem můžete zabezpečit různé akce s různými rozsahy. Například získání informací o zákaznících vyžaduje api://contoso.com/customer.read obor a aktualizace zákazníků vyžaduje api://contoso.com/customer.write obor.

Ověření tokenů

Dev Proxy umožňuje simulovat rozhraní CRUD API zabezpečené pomocí Microsoft Entra a zkontrolovat, že používáte platný token. Ověřování tokenu je vhodné, když máte registraci aplikace v Microsoft Entra, ale tým stále vytváří rozhraní API. Umožňuje přesněji otestovat aplikaci.

Pokud chcete, aby dev Proxy ověřil přístupový token, přidejte entraAuthConfig vlastnost do vlastnosti validateSigningKey a nastavte ji na true:

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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})]"
    }
  ]
}

Pokud se pokusíte volat rozhraní API s ručně vytvořeným tokenem, obdržíte 401 Unauthorized odpověď. Dev Proxy umožňuje pouze požadavky s platným tokenem vydaným microsoftem Entra.

Další krok

Přečtěte si další informace o CrudApiPlugin.

Ukázky

Projděte si také související ukázky dev proxy serveru: