Microsoft Entra-val védett CRUD API szimulációja

Egy pillantással
Cél: CRUD API szimulálása Entra-hitelesítéssel
Idő: 20 perc
Beépülő modulok:CrudApiPlugin
Előfeltételek:Fejlesztői proxy beállítása

Alkalmazások létrehozásakor gyakran használ háttér API-kat. Előfordulhat, hogy ezek az API-k még nem érhetők el, vagy más csapatok frissítik őket, hogy megfeleljenek a legújabb követelményeknek. A várakozás elkerülése érdekében általában egy szimulált API-t hoz létre, amely visszaadja a szükséges adatokat. Bár ez a megközelítés feloldja a letiltást, időt kell szánnia egy OLYAN API létrehozására, amelyet végül lecserél a valódira. Még bonyolultabb lesz, ha az API-t a Microsoft Entra használatával kell biztonságossá tenni. A felesleges idő elkerülése érdekében a Dev Proxy használatával szimulálhatja a CRUD API-t, és felgyorsíthatja a fejlesztést.

CrudApiPluginA crud (létrehozás, olvasás, frissítés, törlés) API-t szimulálhatja egy memóriabeli adattárral. Egy egyszerű konfigurációs fájl használatával meghatározhatja, hogy a modell API mely URL-címeket támogatja, és milyen adatokat ad vissza. A beépülő modul emellett támogatja a CORS-t az ügyféloldali alkalmazások tartományközi használatához. A beépülő modul támogatja a Microsoft Entra-hitelesítést is, így biztonságossá teheti a makett API-t a Microsoft Entra használatával, és ugyanazt a hitelesítési folyamatot implementálhatja az alkalmazáshoz, mint az éles környezetben.

Forgatókönyv

Például olyan alkalmazást készít, amely lehetővé teszi a felhasználók számára az ügyfelek kezelését. Az adatok lekéréséhez meg kell hívnia a /customers háttér API végpontját. Az API-t a Microsoft Entra védi. Annak érdekében, hogy a háttérrendszer csapata ne várjon a munkájuk befejezésére, úgy dönt, hogy a Dev Proxy használatával szimulálja az API-t, és visszaadja a szükséges adatokat.

Mielőtt elkezdené

Először hozzon létre egy szimulált CRUD API-t ügyféladatokkal. Az API működésének megerősítése után biztonságossá teheti azt a Microsoft Entra használatával.

1. példa: A Microsoft Entra által védett CRUD API szimulálása egyetlen hatókör használatával

Az első példában a teljes API-t egyetlen hatókörrel védi. Függetlenül attól, hogy a felhasználóknak információt kell kérniük az ügyfelekről, vagy frissíteniük kell őket, ugyanazt az engedélyt kell használniuk.

A customers-api.json fájlban adjon hozzá információt az Entráról.

Fájl:customers-api.json

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

A auth tulajdonság entra értékre állításával meghatározza, hogy az API-t a Microsoft Entra védi. A tulajdonságban entraAuthConfig adja meg a konfiguráció részleteit. A audience tulajdonság az API célközönségét, a issuer tulajdonság a jogkivonatok kiállítóját, a scopes tulajdonság pedig az API eléréséhez szükséges hatóköröket határozza meg. Mivel az API-fájl gyökérszintjén van definiálva scopes , minden műveletnek ugyanazt a hatókört kell megadnia.

Ha token nélkül próbálja meghívni az API-t a megadott közönséggel, kiállítóval és jogosultságokkal, a válasz 401 Unauthorized jelenik meg.

Feljegyzés

Ebben a szakaszban a Dev Proxy nem érvényesíti a tokent. Csak azt ellenőrzi, hogy a jogkivonat jelen van-e, és rendelkezik-e a szükséges célközönséggel, kiállítóval és hatókörökkel. Ez kényelmes a korai fejlesztés során, ha még nem rendelkezik valódi Microsoft Entra-alkalmazásregisztrációval, és nem tud valódi jogkivonatot beszerezni.

2. példa: A Microsoft Entra által biztosított CRUD API szimulálása különböző hatókörök használatával különböző műveletekhez

A különböző API-műveletek sok esetben eltérő engedélyeket igényelnek. Az ügyfelek adatainak lekéréséhez például más engedélyre lehet szükség, mint a frissítésükre. Ebben a példában különböző API-műveleteket biztosít különböző hatókörökkel.

Frissítse a fájlt az customers-api.json alábbiak szerint:

Fájl:customers-api.json (műveletszintű hatókörökkel)

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

Ezúttal nem adja meg a scopes jelölőt az API-fájl gyökérszintjén. Ehelyett minden művelethez meg kell adnia őket. Így különböző műveleteket biztosíthat különböző hatókörökkel. Az ügyfelek adatainak lekéréséhez például a api://contoso.com/customer.read hatókör szükséges, míg az ügyfelek frissítéséhez a api://contoso.com/customer.write hatókör.

Tokenek érvényesítése

A Dev Proxy lehetővé teszi, hogy szimuláljon egy, a Microsoft Entra által védett CRUD API-t, és ellenőrizze, hogy érvényes jogkivonatot használ-e. A jogkivonat érvényesítése akkor kényelmes, ha alkalmazásregisztrációval rendelkezik a Microsoft Entra-ban, de a csapat még mindig építi az API-t. Lehetővé teszi az alkalmazás pontosabb tesztelését.

Ha azt szeretné, hogy a Dev Proxy érvényesítse a hozzáférési jogkivonatot, a tulajdonsághoz entraAuthConfig adja hozzá a validateSigningKey tulajdonságot, és állítsa a következőre true:

Fájl:customers-api.json (jogkivonat-ellenőrzéssel)

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

Ha saját készítésű tokennel próbálja hívni az API-t, 401 Unauthorized választ kap. A Dev Proxy csak a Microsoft Entra által kiadott érvényes jogkivonattal rendelkező kéréseket engedélyezi.

Következő lépés

További információ a CrudApiPluginról.

Példák

Lásd még a kapcsolódó Dev Proxy-mintákat: