Symulowanie interfejsu API CRUD zabezpieczonego za pomocą usługi Microsoft Entra
Podczas tworzenia aplikacji często korzystasz z backendowych interfejsów API. 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 Cię odblokowuje, wymaga od Ciebie poświęcenia czasu na budowanie interfejsu API, który docelowo zastępujesz 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 w aplikacjach klienckich. Wtyczka obsługuje również uwierzytelnianie Microsoft Entra, dzięki czemu można zabezpieczyć makietowy interfejs API za pomocą 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 pojedynczego zakresu. Niezależnie od tego, czy użytkownicy muszą uzyskać informacje o klientach lub zaktualizować je, używają tego samego uprawnienia.
W pliku customers-api.json
dodaj informacje o Entra.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.24.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 właściwość auth
na entra
, określasz, że interfejs API jest zabezpieczony za pomocą Microsoft Entra. W właściwości entraAuthConfig
określasz 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, a także bez określonego odbiorcy, wystawcy i zakresów, otrzymasz odpowiedź 401 Unauthorized
.
Uwaga
Na tym etapie serwer proxy deweloperów nie weryfikuje tokenu. Sprawdza tylko, czy token jest obecny i ma wymaganego odbiorcę, 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: Symulować zabezpieczony interfejs API CRUD z Microsoft Entra, używając 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/dotnet/dev-proxy/main/schemas/v0.24.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ślasz scopes
na poziomie root 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/dotnet/dev-proxy/main/schemas/v0.24.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ź. Dev Proxy zezwala tylko na żądania z prawidłowym tokenem wystawionym przez Microsoft Entra.
Następny krok
Dowiedz się więcej o crudApiPlugin.
Przykłady
Zobacz również powiązane przykłady Dev Proxy: