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.
CrudApiPlugin
Za 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: