Een CRUD-API simuleren die is beveiligd met Microsoft Entra
Bij het bouwen van apps werkt u vaak met back-end-API's. Soms zijn deze API's nog niet beschikbaar, of andere teams werken ze bij om te voldoen aan de nieuwste vereisten. Om te voorkomen dat u wacht, maakt u doorgaans een mock-API die de gegevens retourneert die u nodig hebt. Hoewel deze methode u deblokkert, moet u tijd besteden aan het bouwen van een API die u uiteindelijk vervangt door de echte. Het wordt nog ingewikkelder wanneer u uw API moet beveiligen met Microsoft Entra. Om te voorkomen dat u tijd verspilt, kunt u Dev Proxy gebruiken om een CRUD-API te simuleren en de ontwikkeling te versnellen.
Met behulp van de CrudApiPlugin
API kunt u een CRUD-API (Maken, Lezen, Bijwerken, Verwijderen) simuleren met een gegevensarchief in het geheugen. Met behulp van een eenvoudig configuratiebestand kunt u definiëren welke URL's uw mock-API ondersteunt en welke gegevens worden geretourneerd. De invoegtoepassing biedt ook ondersteuning voor CORS voor gebruik tussen domeinen vanuit toepassingen aan de clientzijde. De invoegtoepassing biedt ook ondersteuning voor Microsoft Entra-verificatie, zodat u uw mock-API kunt beveiligen met Microsoft Entra en dezelfde verificatiestroom voor uw app kunt implementeren als in uw productieomgeving.
Scenario
Stel dat u een app bouwt waarmee gebruikers klanten kunnen beheren. Als u de gegevens wilt ophalen, moet u het /customers
eindpunt van de back-end-API aanroepen. De API is beveiligd met Microsoft Entra. Om te voorkomen dat het back-endteam wacht totdat het werk is voltooid, besluit u Dev Proxy te gebruiken om de API te simuleren en de benodigde gegevens te retourneren.
Voordat u begint
U begint met het maken van een gesimuleerde CRUD-API met klantgegevens. Nadat u hebt bevestigd dat de API werkt, kunt u deze beveiligen met Microsoft Entra.
Voorbeeld 1: Een CRUD-API simuleren die met één scope is beveiligd via Microsoft Entra
In het eerste voorbeeld beveiligt u de hele API met één bereik. Ongeacht of gebruikers informatie over klanten moeten krijgen of ze moeten bijwerken, gebruiken ze dezelfde machtiging.
Voeg in het customers-api.json
bestand informatie over Entra toe.
{
"$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})]"
}
]
}
Door de eigenschap auth
in te stellen op entra
, geeft u aan dat de API wordt beveiligd met Microsoft Entra. In de entraAuthConfig
eigenschap geeft u de configuratiegegevens op. De audience
eigenschap specificeert de doelgroep van de API, de issuer
eigenschap geeft de verlener van de tokens op en de scopes
eigenschap specificeert de bereiken die vereist zijn voor toegang tot de API. Omdat u definieert scopes
op het hoofdniveau van het API-bestand, hebben alle acties hetzelfde bereik nodig.
Als u de API probeert aan te roepen zonder een token met de opgegeven doelgroep, verlener en bereiken, krijgt u een 401 Unauthorized
antwoord.
Notitie
In deze fase valideert Dev Proxy het token niet. Er wordt alleen gecontroleerd of het token aanwezig is en de vereiste doelgroep, uitgever en toegangsrechten heeft. Dit is handig tijdens de vroege ontwikkeling, wanneer u nog geen echte Registratie van Microsoft Entra-apps hebt en geen echt token kunt krijgen.
Voorbeeld 2: Simuleer een CRUD-API die is beveiligd met Microsoft Entra, waarbij verschillende scopes worden gebruikt voor verschillende acties.
In veel gevallen zijn voor verschillende API-bewerkingen verschillende machtigingen vereist. Voor het ophalen van informatie over klanten is bijvoorbeeld mogelijk een andere machtiging vereist dan het bijwerken ervan. In dit voorbeeld beveiligt u verschillende API-acties met verschillende scopes.
Werk het customers-api.json
bestand als volgt bij:
{
"$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"]
}
}
]
}
Deze keer specifieer je scopes
niet op het hoofdniveau van het API-bestand. In plaats daarvan geeft u deze op voor elke actie. Op deze manier kunt u verschillende acties verzekeren met verschillende toepassingsgebieden. Het ophalen van informatie over klanten vereist bijvoorbeeld het api://contoso.com/customer.read
bereik, terwijl het bijwerken van klanten het api://contoso.com/customer.write
bereik vereist.
Tokens valideren
Met dev Proxy kunt u een CRUD-API simuleren die is beveiligd met Microsoft Entra en controleren of u een geldig token gebruikt. Het valideren van het token is handig wanneer u een app-registratie in Microsoft Entra hebt, maar het team bouwt nog steeds de API. Hiermee kunt u uw app nauwkeuriger testen.
Als u wilt dat Dev Proxy het toegangstoken valideert, voegt u de eigenschap validateSigningKey
toe aan entraAuthConfig
en stelt u deze in op 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})]"
}
]
}
Als u de API probeert aan te roepen met een zelf ontworpen token, krijgt u een 401 Unauthorized
antwoord. Dev Proxy staat alleen aanvragen toe met een geldig token dat is uitgegeven door Microsoft Entra.
Volgende stap
Meer informatie over de CrudApiPlugin.
Voorbeelden
Zie ook de gerelateerde Dev Proxy-voorbeelden: