Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure App Service biedt ingebouwde verificatie (ook wel EasyAuth genoemd) die aanmelding van gebruikers afhandelt voordat aanvragen uw toepassing bereiken. Data API Builder kan de identiteitsgegevens lezen die App Service injecteert, waardoor verificatie wordt ingeschakeld zonder tokens rechtstreeks te beheren.
Belangrijk
De AppService provider vertrouwt identiteitsheaders die worden doorgestuurd door EasyAuth. Zorg ervoor dat clients EasyAuth niet kunnen omzeilen en data-API builder rechtstreeks kunnen bereiken.
Authenticatiestroom
Wanneer Data API Builder wordt uitgevoerd achter Azure App Service waarvoor verificatie is ingeschakeld, verwerkt App Service de OAuth-stroom en geeft deze identiteitsgegevens door via HTTP-headers:
| Phase | Wat gebeurt er? |
|---|---|
| Gebruikersverificatie | App Service onderschept niet-geverifieerde aanvragen en leidt om naar de id-provider |
| Identiteitsinjectie | Na verificatie voegt App Service de X-MS-CLIENT-PRINCIPAL header toe |
| DAB-verwerking | Data API Builder Base64-ontsleutelt de header JSON en bouwt een ClaimsPrincipal uit de claims matrix |
| Authorization | DAB gebruikt ClaimsPrincipal.IsInRole() om de X-MS-API-ROLE header te valideren en vervolgens machtigingen en beleidsregels te evalueren |
Vereiste voorwaarden
- Een Azure-abonnement
- Azure App Service of Azure Functions (op de infrastructuur van App Service)
- Data API Builder CLI geïnstalleerd (installatiehandleiding)
- Een bestaande
dab-config.jsonmet ten minste één entiteit
Snelzoekgids
| Configuratie | Waarde |
|---|---|
| Provider | AppService |
| Identiteitskoptekst |
X-MS-CLIENT-PRINCIPAL (Met Base64 gecodeerde JSON) |
| Koptekst voor rolselectie | X-MS-API-ROLE |
| Ondersteunt aangepaste claims | Yes |
| Lokaal testen | Ja (kopteksten handmatig instellen) |
Stap 1: App Service-verificatie inschakelen
Verificatie configureren in Azure App Service:
Navigeer in Azure Portal naar uw App Service.
Selecteer Instellingen>Authenticatie.
Selecteer Id-provider toevoegen.
Kies Microsoft (of een andere ondersteunde provider).
Configureer de instellingen:
- Type app-registratie: nieuwe maken of bestaande selecteren
- Ondersteunde accounttypen: Kiezen op basis van uw scenario
- Toegang beperken: Verificatie vereisen
Selecteer Toevoegen.
Aanbeveling
App Service-verificatie werkt met meerdere id-providers, waaronder Microsoft, Google, Facebook, Twitter en OpenID Connect.
Stap 2: Data API Builder configureren
Stel de verificatieprovider in op AppService:
CLI (Command Line Interface)
dab configure \
--runtime.host.authentication.provider AppService
Resulterende configuratie
{
"runtime": {
"host": {
"authentication": {
"provider": "AppService"
}
}
}
}
Opmerking
In tegenstelling tot de EntraID/AzureAD- of Custom-providers vereist AppService geen jwt.audience- of jwt.issuer-instellingen. App Service valideert het token voordat identiteitsgegevens worden doorgegeven aan DAB.
Stap 3: Entiteitsmachtigingen configureren
Machtigingen voor rollen definiëren. Data API Builder evalueert rollen via ClaimsPrincipal.IsInRole(), waarmee claims worden gecontroleerd die zijn geparseerd uit de X-MS-CLIENT-PRINCIPAL header. Voeg rolclaims toe aan de claims matrix met het juiste rolclaimtype.
Voorbeeldconfiguratie
# Allow authenticated users to read
dab update Book \
--permissions "authenticated:read"
# Allow editors to create and update
dab update Book \
--permissions "editor:create,read,update"
Resulterende configuratie
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "editor",
"actions": ["create", "read", "update"]
}
]
}
}
}
Stap 4: Lokaal testen met X-MS-CLIENT-PRINCIPAL
U kunt App Service-verificatie lokaal testen door de X-MS-CLIENT-PRINCIPAL header handmatig op te geven. Met deze aanpak wordt gesimuleerd wat EasyAuth doorstuurt naar uw app en kunt u rollen en claimgestuurd gedrag testen zonder te implementeren in Azure.
Een client-principal maken
De X-MS-CLIENT-PRINCIPAL header bevat een met Base64 gecodeerd JSON-object. Data API Builder parseert de volgende eigenschappen:
{
"auth_typ": "aad",
"name_typ": "name",
"role_typ": "roles",
"claims": [
{ "typ": "name", "val": "Alice Smith" },
{ "typ": "email", "val": "alice@contoso.com" },
{ "typ": "roles", "val": "authenticated" },
{ "typ": "roles", "val": "editor" },
{ "typ": "http://schemas.microsoft.com/identity/claims/objectidentifier", "val": "abc-123-def" }
]
}
Codeer de hoofdsom
Codeer de JSON als Base64. U kunt elk hulpprogramma gebruiken:
PowerShell:
$json = @'
{
"auth_typ": "aad",
"name_typ": "name",
"role_typ": "roles",
"claims": [
{ "typ": "name", "val": "alice@contoso.com" },
{ "typ": "roles", "val": "authenticated" },
{ "typ": "roles", "val": "editor" }
]
}
'@
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($json))
Bash:
echo '{
"auth_typ": "aad",
"name_typ": "name",
"role_typ": "roles",
"claims": [
{ "typ": "name", "val": "alice@contoso.com" },
{ "typ": "roles", "val": "authenticated" },
{ "typ": "roles", "val": "editor" }
]
}' | base64
Een aanvraag verzenden met de header
curl -X GET "http://localhost:5000/api/Book" \
-H "X-MS-CLIENT-PRINCIPAL: eyJpZGVudGl0eVByb3ZpZGVyIjoiYWFkIiwidXNlcklkIjoidXNlci0xMjM0NSIsInVzZXJEZXRhaWxzIjoiYWxpY2VAY29udG9zby5jb20iLCJ1c2VyUm9sZXMiOlsiYXV0aGVudGljYXRlZCIsImVkaXRvciJdfQ==" \
-H "X-MS-API-ROLE: editor"
X-MS-CLIENT-PRINCIPAL structuur
Data API Builder parseert de volgende eigenschappen van de client-principal:
| Vastgoed | Typologie | Description |
|---|---|---|
auth_typ |
touw | Het verificatietype (bijvoorbeeld aad). Vereist dat de identiteit wordt beschouwd als geverifieerd. |
name_typ |
touw | (Optioneel) Het claimtype dat wordt gebruikt voor de naam van de gebruiker |
role_typ |
touw | (Optioneel) Het claimtype dat wordt gebruikt voor rollen (standaard ingesteld op roles) |
claims |
object[] | Matrix van claims met typ en val eigenschappen. Rollen moeten hier als 'claims' worden opgenomen. |
Belangrijk
Rollen worden geëvalueerd via ClaimsPrincipal.IsInRole(), waarmee de claims matrix wordt gecontroleerd op claims die overeenkomen met de role_typ. Neem elke rol op als een afzonderlijke claimvermelding (bijvoorbeeld { "typ": "roles", "val": "editor" }).
Claims gebruiken in het databasebeleid
Met de AppService-provider kunt u claims gebruiken in databasebeleid. Dit maakt beveiliging op rijniveau mogelijk op basis van gebruikersidentiteit.
Voorbeeld: Filteren op gebruikersobject-id
In dit voorbeeld wordt de oid-claim (object-ID) gebruikt, die Microsoft Entra-ID opneemt in tokens.
{
"entities": {
"Order": {
"source": "dbo.Orders",
"permissions": [
{
"role": "authenticated",
"actions": [
{
"action": "read",
"policy": {
"database": "@claims.oid eq @item.customerId"
}
}
]
}
]
}
}
}
Aanbeveling
Veelvoorkomende claimtypen van Microsoft Entra-id zijn onder andere oid (object-id), email, nameen preferred_username. Gebruik de exacte claimtype-string van uw identiteitsprovider.
Beschikbare claimverwijzingen
Claimverwijzingen gebruiken de exacte claimtypetekenreeks uit de claims matrix:
| Verwijzing naar claim | Description |
|---|---|
@claims.<claim-type> |
Elke claim van de claims array, geselecteerd op basis van de typ eigenschap |
Als uw principal bijvoorbeeld { "typ": "email", "val": "alice@contoso.com" } bevat, gebruikt u @claims.email in uw beleid. Het claimtype moet exact overeenkomen.
Anonieme aanvragen
Wanneer App Service niet-geverifieerde aanvragen toestaat of wanneer deze lokaal worden getest zonder de X-MS-CLIENT-PRINCIPAL header, stelt de verificatie-middleware van Data API Builder de X-MS-API-ROLE header anonymous automatisch in. Aanvragen worden vervolgens geëvalueerd met behulp van de anonymous rol:
# No principal header = anonymous role (X-MS-API-ROLE set automatically)
curl -X GET "http://localhost:5000/api/Book"
Dit werkt alleen als uw entiteit machtigingen heeft voor de anonymous rol:
{
"permissions": [
{
"role": "anonymous",
"actions": ["read"]
}
]
}
Probleemoplossingsproces
| Symptoom | Mogelijke oorzaak | Solution |
|---|---|---|
401 Unauthorized (of doorsturen naar inloggen) |
EasyAuth heeft de aanvraag geblokkeerd voordat de DAB werd bereikt | Meld u aan via EasyAuth of verzend geldige referenties; Instellingen voor App Service-verificatie controleren |
403 Forbidden |
Niet geassocieerd met machtigingen | Voeg de rol toe aan entiteitsautorisaties |
403 Forbidden |
X-MS-API-ROLE niet in gebruikersrollen |
Zorg ervoor dat de headerwaarde overeenkomt met een rolclaim in de array van de claims principal. |
| Claims zijn niet beschikbaar | Ontbrekende claims matrix in principal |
Claims toevoegen aan de X-MS-CLIENT-PRINCIPAL JSON |
| Rol wordt niet herkend | Rollen die niet in claims matrix zijn opgenomen |
Rolclaims toevoegen met de juiste role_typ (bijvoorbeeld { "typ": "roles", "val": "editor" }) |
| Lokaal testen mislukt | Header die niet is gecodeerd met Base64 | De JSON correct coderen voordat u deze verzendt |
Volledig configuratievoorbeeld
{
"$schema": "https://github.com/Azure/data-api-builder/releases/latest/download/dab.draft.schema.json",
"data-source": {
"database-type": "mssql",
"connection-string": "@env('SQL_CONNECTION_STRING')"
},
"runtime": {
"host": {
"authentication": {
"provider": "AppService"
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "anonymous",
"actions": ["read"]
},
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "editor",
"actions": ["create", "read", "update", "delete"]
}
]
},
"Order": {
"source": "dbo.Orders",
"permissions": [
{
"role": "authenticated",
"actions": [
{
"action": "read",
"policy": {
"database": "@claims.oid eq @item.customerId"
}
}
]
}
]
}
}
}