Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Data API Builder stöder identitetsprovidrar från tredje part via den anpassade autentiseringsprovidern. 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:
| Phase | 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 |
|---|---|
| Provider | 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) måste du konfigurera providern att även generera ett roles anspråk eller använda en åtgärd efter inloggningen för att kopiera värden till ett roles anspråk.
Steg 2: Konfigurera data-API-byggare
Ange autentiseringsprovidern till Custom och konfigurera JWT-inställningarna:
Kommandoradsgränssnitt (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:
Kommandoradsgränssnitt (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
- 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.
Tips/Råd
Detaljerad vägledning om hur du konfigurerar JWT-anspråk med Okta finns i Implementera avancerade JWT-anspråk med Oktas SDK.
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:
| Check | Description |
|---|---|
| Underskrift | Verifierad med signeringsnycklar som identifierats via den konfigurerade jwt.issuer auktoriteten (OpenID Connect metadata / JWKS) |
| Utfärdare | Måste exakt matcha jwt.issuer konfigurationen |
| målgrupp | Måste matcha konfigurationen exakt jwt.audience |
| 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
| Symtom | 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 |
Rollkrav saknas | 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) |
Viktigt!
DAB använder för närvarande anspråkstypen roles för alla rollkontroller. Det här värdet är hårdkodat och kan inte ändras till groups, permissionseller andra anspråksnamn. Konfigurera identitetsleverantören för att tilldela roller i ett anspråk med namnet roles.
Vanliga format för utfärdare
| Provider | 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": ["*"]
}
]
}
}
}