Udostępnij za pośrednictwem


Symulowanie interfejsu API CRUD zabezpieczonego za pomocą usługi Microsoft Entra

Podczas tworzenia aplikacji często korzystasz z interfejsów API zaplecza. Czasami te interfejsy API nie są jeszcze dostępne lub inne zespoły aktualizują je w celu spełnienia najnowszych wymagań. Aby uniknąć oczekiwania, zazwyczaj należy utworzyć pozorny interfejs API, który zwraca potrzebne dane. Mimo że to podejście odblokuje Cię, wymaga to poświęcania czasu na tworzenie interfejsu API, który ostatecznie zastępuje się rzeczywistym. Staje się jeszcze bardziej skomplikowane, gdy musisz zabezpieczyć interfejs API za pomocą usługi Microsoft Entra. Aby uniknąć marnowania czasu, możesz użyć serwera proxy deweloperskiego do symulowania interfejsu API CRUD i przyspieszenia opracowywania.

CrudApiPluginZa pomocą programu można symulować interfejs API CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) przy użyciu magazynu danych w pamięci. Korzystając z prostego pliku konfiguracji, można zdefiniować adresy URL obsługiwane przez pozorny interfejs API i dane, które zwraca. Wtyczka obsługuje również mechanizm CORS na potrzeby użycia między domenami z aplikacji po stronie klienta. Wtyczka obsługuje również uwierzytelnianie Firmy Microsoft Entra, dzięki czemu można zabezpieczyć pozorny interfejs API za pomocą firmy Microsoft Entra i zaimplementować ten sam przepływ uwierzytelniania dla aplikacji, jak w środowisku produkcyjnym.

Scenariusz

Załóżmy, że tworzysz aplikację, która umożliwia użytkownikom zarządzanie klientami. Aby pobrać dane, musisz wywołać /customers punkt końcowy interfejsu API zaplecza. Interfejs API jest zabezpieczony za pomocą usługi Microsoft Entra. Aby uniknąć oczekiwania na zakończenie pracy przez zespół zaplecza, decydujesz się użyć serwera proxy deweloperskiego do symulowania interfejsu API i zwrócenia potrzebnych danych.

Zanim rozpoczniesz

Zacznij od utworzenia symulowanego interfejsu API CRUD z danymi klienta. Po potwierdzeniu, że interfejs API działa, możesz zabezpieczyć go za pomocą usługi Microsoft Entra.

Przykład 1. Symulowanie interfejsu API CRUD zabezpieczonego za pomocą usługi Microsoft Entra przy użyciu jednego zakresu

W pierwszym przykładzie cały interfejs API jest zabezpieczony przy użyciu jednego zakresu. Niezależnie od tego, czy użytkownicy muszą uzyskać informacje o klientach lub zaktualizować je, używają tego samego uprawnienia.

customers-api.json W pliku dodaj informacje o 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})]"
    }
  ]
}

Ustawiając auth właściwość entra , którą określisz, interfejs API jest zabezpieczony za pomocą usługi Microsoft Entra. entraAuthConfig We właściwości określ szczegóły konfiguracji. Właściwość audience określa odbiorców interfejsu API, issuer właściwość określa wystawcę tokenów, a scopes właściwość określa zakresy wymagane do uzyskania dostępu do interfejsu API. Ponieważ definiujesz scopes na poziomie głównym pliku interfejsu API, wszystkie akcje wymagają tego samego zakresu.

Jeśli spróbujesz wywołać interfejs API bez tokenu z określonymi odbiorcami, wystawcą 401 Unauthorized i zakresami, otrzymasz odpowiedź.

Uwaga

Na tym etapie serwer proxy deweloperów nie weryfikuje tokenu. Sprawdza tylko, czy token jest obecny i ma wymaganą publiczność, wystawcę i zakresy. Jest to wygodne podczas wczesnego programowania, gdy nie masz jeszcze prawdziwej rejestracji aplikacji Microsoft Entra i nie możesz uzyskać rzeczywistego tokenu.

Przykład 2. Symulowanie interfejsu API CRUD zabezpieczonego za pomocą firmy Microsoft Entra przy użyciu różnych zakresów dla różnych akcji

W wielu przypadkach różne operacje interfejsu API wymagają różnych uprawnień. Na przykład uzyskanie informacji o klientach może wymagać innego uprawnienia niż ich aktualizowanie. W tym przykładzie zabezpieczasz różne akcje interfejsu API z różnymi zakresami.

customers-api.json Zaktualizuj plik w następujący sposób:

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

Tym razem nie określisz scopes elementu na poziomie głównym pliku interfejsu API. Zamiast tego należy określić je dla każdej akcji. Dzięki temu można zabezpieczyć różne akcje z różnymi zakresami. Na przykład uzyskanie informacji o klientach wymaga api://contoso.com/customer.read zakresu, a aktualizacja klientów wymaga api://contoso.com/customer.write zakresu.

Weryfikowanie tokenów

Serwer proxy deweloperów umożliwia symulowanie interfejsu API CRUD zabezpieczonego za pomocą usługi Microsoft Entra i sprawdzenie, czy używasz prawidłowego tokenu. Weryfikowanie tokenu jest wygodne, gdy masz rejestrację aplikacji w usłudze Microsoft Entra, ale zespół nadal tworzy interfejs API. Pozwala to dokładniej przetestować aplikację.

Jeśli chcesz, aby serwer proxy deweloperów zweryfikował token dostępu, do entraAuthConfig właściwości dodaj validateSigningKey właściwość i ustaw ją na :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})]"
    }
  ]
}

Jeśli spróbujesz wywołać interfejs API przy użyciu tokenu utworzonego samodzielnie, otrzymasz 401 Unauthorized odpowiedź. Serwer proxy deweloperów zezwala tylko na żądania z prawidłowym tokenem wystawionym przez firmę Microsoft Entra.

Następny krok

Dowiedz się więcej o crudApiPlugin.

Przykłady

Zobacz również powiązane przykłady serwera proxy deweloperów: