Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Data API Builder stöder identitetsleverantörer från tredje part genom verifiering med en anpassad autentiseringsleverantör och JSON-webbtoken (JWT). Använd den här metoden när din organisation använder Okta, Auth0 eller någon annan OAuth 2.0/OpenID Connect-kompatibel identitetsprovider.
Autentiseringsflöde
Med en anpassad identitetsprovider hanterar klientappen användarautentisering och skickar sedan åtkomsttoken till Data API Builder:
| Fas | Vad händer |
|---|---|
| Användarautentisering | Användaren loggar in via identitetsprovidern (Okta, Auth0 osv.) |
| Tokenförvärv | Klientappen tar emot en åtkomsttoken från IdP:t |
| API-anrop | Klienten skickar token till DAB i Authorization rubriken |
| Validering | DAB validerar JWT (utfärdare, målgrupp, signatur) |
| Behörighet | DAB extraherar roller och utvärderar behörigheter |
Förutsättningar
- Ett konto med din identitetsprovider (Okta, Auth0 osv.)
- En applikation registrerad i din identitetsleverantör
- Cli för data-API-byggare installerad (installationsguide)
- En befintlig
dab-config.jsonmed minst en entitet
Snabbreferens
| Inställning | Värde |
|---|---|
| Leverantör | Custom |
| Krävs för validering |
iss, aud, exp, giltig signatur |
| Krävs för auktorisering |
roles anspråk som innehåller den valda rollen |
| Tokenrubrik | Authorization: Bearer <token> |
| Rollanspråkstyp |
roles (fastställd, inte konfigurerbar) |
| Rubrik för val av roll | X-MS-API-ROLE |
Steg 1: Konfigurera din identitetsprovider
De exakta stegen beror på leverantören. Här är de nyckelvärden som du behöver:
Värden att samla in
| Värde | Här hittar du den | Används för |
|---|---|---|
| Utfärdar-URL | Leverantörens dokumentation eller OAuth-metadataslutpunkt | DAB jwt.issuer (används som JWT-myndighet) |
| målgrupp | Programmets klient-ID eller en anpassad API-identifierare | DAB jwt.audience |
Anmärkning
DAB använder den konfigurerade jwt.issuer som JWT-Authority. Signeringsnycklar identifieras automatiskt via OpenID Connect-standardmetadata (vanligtvis <issuer>/.well-known/openid-configuration).
Okta exempel
- Logga in på okta-administratörskonsolen.
- Gå till Program>Program.
- Skapa eller välj ett program.
- Observera klient-ID :t (används som målgrupp).
- Utfärdaren är vanligtvis
https://<your-domain>.okta.com.
Auth0-exempel
- Logga in på instrumentpanelen Auth0.
- Gå till Program>API:er.
- Skapa eller välj ett API.
- Observera identifieraren (använd som målgrupp).
- Utfärdaren är
https://<your-tenant>.auth0.com/.
Viktigt!
Data API Builder använder en fast anspråkstyp roles för rollbaserad auktorisering. Det går inte att konfigurera det här värdet. Om din identitetsprovider genererar roller i ett annat anspråk (till exempel groups eller permissions) konfigurerar du det så att det också genererar ett roles anspråk. Auth0-användare bör granska den kända namnavståndskonflikten innan de fortsätter.
Steg 2: Konfigurera data-API-byggare
Ange autentiseringsprovidern till Custom och konfigurera JWT-inställningarna:
CLI
# Set the authentication provider
dab configure \
--runtime.host.authentication.provider Custom
# Set the expected audience
dab configure \
--runtime.host.authentication.jwt.audience "<your-api-identifier>"
# Set the expected issuer
dab configure \
--runtime.host.authentication.jwt.issuer "https://<your-issuer>/"
Resulterande konfiguration
{
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<your-api-identifier>",
"issuer": "https://<your-issuer>/"
}
}
}
}
}
Steg 3: Konfigurera entitetsbehörigheter
Definiera behörigheter för de roller som identitetsprovidern tilldelar:
CLI
# Allow authenticated users to read
dab update Book \
--permissions "authenticated:read"
# Allow users with 'admin' role full access
dab update Book \
--permissions "admin:*"
Resulterande konfiguration
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}
Steg 4: Konfigurera roller i din identitetsprovider
DAB förväntar sig roller i ett roles anspråk. Konfigurera identitetsprovidern så att den inkluderar det här anspråket.
Okta: Lägga till grupper som roller
- I okta-administratörskonsolen går du till Säkerhets-API>.
- Välj din auktoriseringsserver.
- Gå till fliken Anspråk .
- Lägg till ett anspråk:
-
Namn:
roles - Inkludera i tokentyp: Åtkomsttoken
- Värdetyp: Grupper
- Filter: Välj de grupper som ska inkluderas
-
Namn:
Auth0: Lägga till roller med en åtgärd
Auth0 kräver anpassade anspråk för att använda kollisionsresistenta namnområdesnamn (till exempel https://example.com/roles). Anspråk utan namnområde som krockar med reserverade namn utesluts utan meddelande från tokenen. Mer information finns i Skapa anpassade anspråk i Auth0-dokumentationen.
Data API Builder förväntar sig det exakta anspråksnamnet roles, inte en namnområdesvariant. Om Auth0 accepterar ett anspråk som inte är namnområde roles beror på klientkonfigurationen.
I instrumentpanelen Auth0 går du till Åtgärdsbibliotek>.
Skapa en ny åtgärd (utlösare efter inloggning).
Lägg till kod för att inkludera roller:
exports.onExecutePostLogin = async (event, api) => { const roles = event.authorization?.roles || []; if (roles.length > 0) { api.accessToken.setCustomClaim('roles', roles); } };Distribuera åtgärden och lägg till den i ditt inloggningsflöde.
Verifiera den avkodade åtkomsttokenpå jwt.io och bekräfta att anspråket
rolesfinns.
Warning
Auth0 kan tyst ignorera roles-claimet utan namnrymd beroende på klientorganisationens inställningar. Om anspråket saknas i token, kontrollera Inställningar>Avancerat i Auth0-dashboarden för namnrymdskrav. Klienter som kräver namnområdesanspråk är för närvarande inte kompatibla med Data API Builder rollbaserad auktorisering för anpassade roller. De inbyggda rollerna authenticated och anonymous fungerar fortfarande eftersom de inte är beroende av ett roles claim.
Tips/Råd
Detaljerad vägledning om hur du konfigurerar JWT-krav med Okta finns i Anpassa tokenen som returneras av Okta.
Steg 5: Testa konfigurationen
Starta data-API-byggare:
dab startHämta en token från din identitetsprovider. Använd leverantörens SDK eller ett verktyg som Postman.
Kontrollera token vid jwt.io för att verifiera:
- Anspråket
audmatchar din konfigurerade målgrupp - Anspråket
issmatchar din konfigurerade utfärdare - Anspråket
rolesinnehåller de förväntade värdena
- Anspråket
Anropa API:et:
curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>"Om du vill använda en anpassad roll inkluderar du
X-MS-API-ROLErubriken:curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>" \ -H "X-MS-API-ROLE: admin"
JWT-verifieringsinformation
Data API Builder validerar dessa aspekter av JWT:
| Kontrollera | Beskrivning |
|---|---|
| Underskrift | Verifierad med signeringsnycklar som identifierats via den konfigurerade jwt.issuer utfärdaren (OpenID Connect-metadata eller JSON Web Key Set (JWKS)) |
| Utfärdare | Måste exakt matcha jwt.issuer konfigurationen |
| målgrupp | Måste exakt matcha jwt.audience konfigurationen |
| förfallodatum | Token får inte ha upphört att gälla (exp anspråk) |
| Inte tidigare | Token måste vara giltig (nbf påstående, om det finns) |
Felsökning
| Symptom | Möjlig orsak | Lösning |
|---|---|---|
401 Unauthorized |
Felmatchning av utfärdare | Kontrollera att iss anspråket matchar exakt (inklusive avslutande snedstreck) |
401 Unauthorized |
Målgruppsmissmatch | Kontrollera att anspråket aud matchar ditt konfigurerade värde |
401 Unauthorized |
Token har upphört att gälla | Hämta en ny token |
401 Unauthorized |
Metadata är inte tillgängliga | Se till att DAB kan nå <issuer>/.well-known/openid-configuration |
403 Forbidden |
Rollen finns inte i token | Lägg till rollen i IdP-konfigurationen |
403 Forbidden |
Inget roles anspråk hittades |
Konfigurera din IdP för att inkludera ett roles anspråk |
403 Forbidden |
Fel anspråksnamn | DAB använder anspråkstyp roles (fast, ej konfigurerbar) |
403 Forbidden |
Auth0-anpassat claim utelämnas utan varning | Auth0 kan släppa icke-namnrymdsanpassade anspråk. Kontrollera att roles-claimen finns i den avkodade tokenen på jwt.io. Se Auth0: Lägg till roller med en åtgärd |
Viktigt!
Anspråkstypen roles är hårdkodad för alla rollkontroller och kan inte ändras. Konfigurera identitetsleverantören så att den skickar ett anspråk som heter exakt roles. Auth0-användare bör granska namnavståndskonflikten.
Vanliga format för utfärdare
| Leverantör | Issuer-format |
|---|---|
| Okta |
https://<domain>.okta.com eller https://<domain>.okta.com/oauth2/default |
| Auth0 |
https://<tenant>.auth0.com/ (observera det avslutande snedstrecket) |
| Azure AD B2C | https://<tenant>.b2clogin.com/<tenant-id>/v2.0/ |
| Keycloak | https://<host>/realms/<realm> |
Komplett konfigurationsexempel
Okta-konfiguration
{
"$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": "Custom",
"jwt": {
"audience": "0oa1234567890abcdef",
"issuer": "https://dev-12345.okta.com"
}
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "editor",
"actions": ["create", "read", "update"]
}
]
}
}
}
Auth0-konfiguration
{
"$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": "Custom",
"jwt": {
"audience": "https://my-api.example.com",
"issuer": "https://my-tenant.auth0.com/"
}
}
}
},
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}