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.
Data API Builder ondersteunt id-providers van derden via de aangepaste verificatieprovider. Gebruik deze methode wanneer uw organisatie Okta, Auth0 of een andere OAuth 2.0/OpenID Connect-compatibele id-provider gebruikt.
Authenticatiestroom
Met een aangepaste id-provider verwerkt uw client-app gebruikersverificatie en verzendt het toegangstoken vervolgens naar Data API Builder:
| Phase | Wat gebeurt er? |
|---|---|
| Gebruikersverificatie | Gebruiker meldt zich aan via de id-provider (Okta, Auth0, enzovoort) |
| Token ophalen | Client-app ontvangt een toegangstoken van de IdP |
| API-aanroep | Client verzendt het token naar DAB in de Authorization header |
| Validation | DAB valideert de JWT (uitgever, doelgroep, handtekening) |
| Authorization | DAB extraheert rollen en beoordeelt permissies |
Vereiste voorwaarden
- Een account met uw id-provider (Okta, Auth0, enzovoort)
- Een toepassing die is geregistreerd in uw id-provider
- Data API Builder CLI geïnstalleerd (installatiehandleiding)
- Een bestaande
dab-config.jsonmet ten minste één entiteit
Snelzoekgids
| Configuratie | Waarde |
|---|---|
| Provider | Custom |
| Vereist voor validatie |
iss, , audexpgeldige handtekening |
| Vereist voor autorisatie |
roles claim met de geselecteerde rol |
| Token header | Authorization: Bearer <token> |
| Type roltoewijzing |
roles (opgelost, niet configureerbaar) |
| Koptekst voor rolselectie | X-MS-API-ROLE |
Stap 1: uw id-provider configureren
De exacte stappen zijn afhankelijk van uw provider. Dit zijn de belangrijkste waarden die u nodig hebt:
Te verzamelen waarden
| Waarde | Waar vind ik het? | Gebruikt voor |
|---|---|---|
| URL van uitgever | Documentatie van de provider of OAuth-metagegevens-eindpunt | DAB jwt.issuer (gebruikt als JWT-autoriteit) |
| Audiëntie | De client-id van uw toepassing of een aangepaste API-id | DAB jwt.audience |
Opmerking
DAB maakt gebruik van de geconfigureerde jwt.issuer als de JWT-autorisatie. Ondertekeningssleutels worden automatisch gedetecteerd via standaard Metagegevens van OpenID Connect (meestal <issuer>/.well-known/openid-configuration).
Okta-voorbeeld
- Meld u aan bij de Okta-beheerconsole.
- Navigeer naar Toepassingen>Toepassingen.
- Een toepassing maken of selecteren.
- Noteer de client-id (gebruik deze als doelgroep).
- Uw verlener is doorgaans
https://<your-domain>.okta.com.
Voorbeeld van Auth0
- Meld u aan bij het Auth0-dashboard.
- Navigeer naar Toepassingen>API's.
- Een API maken of selecteren.
- Noteer de id (gebruik deze als doelgroep).
- Uw uitgever is
https://<your-tenant>.auth0.com/.
Belangrijk
Data API Builder maakt gebruik van een vast claimtype voor autorisatie op basis van roles rollen. Deze waarde kan niet worden geconfigureerd. Als uw id-provider rollen verzendt in een andere claim (zoals groups of permissions), moet u uw provider configureren om ook een roles claim te verzenden of een actie na aanmelding gebruiken om waarden naar een roles claim te kopiëren.
Stap 2: Data API Builder configureren
Stel de verificatieprovider in op Custom en configureer de JWT-instellingen.
CLI (Command Line Interface)
# 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>/"
Resulterende configuratie
{
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<your-api-identifier>",
"issuer": "https://<your-issuer>/"
}
}
}
}
}
Stap 3: Entiteitsmachtigingen configureren
Machtigingen definiëren voor de rollen die uw id-provider toewijst:
CLI (Command Line Interface)
# Allow authenticated users to read
dab update Book \
--permissions "authenticated:read"
# Allow users with 'admin' role full access
dab update Book \
--permissions "admin:*"
Resulterende configuratie
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}
Stap 4: Rollen in uw id-provider configureren
DAB verwacht rollen bij een roles claim. Configureer uw id-provider om deze claim op te nemen.
Okta: Groepen toevoegen als rollen
- Ga in de Okta-beheerconsole naar de Beveiligings-API>.
- Selecteer uw autorisatieserver.
- Ga naar het tabblad Claims .
- Een claim toevoegen:
-
Naam:
roles - Opnemen in tokentype: Toegangstoken
- Waardetype: Groepen
- Filter: Selecteer de groepen die u wilt opnemen
-
Naam:
Verificatie0: rollen toevoegen met een actie
- Ga in het Auth0-dashboard naar Acties>Bibliotheek.
- Maak een nieuwe actie (trigger na aanmelding).
- Voeg code toe om rollen op te nemen:
exports.onExecutePostLogin = async (event, api) => {
const roles = event.authorization?.roles || [];
if (roles.length > 0) {
api.accessToken.setCustomClaim('roles', roles);
}
};
- Implementeer de actie en voeg deze toe aan uw aanmeldingsstroom.
Aanbeveling
Stap 5: De configuratie testen
Start Data API Builder:
dab startEen token verkrijgen van uw id-provider. Gebruik de SDK van uw provider of een hulpprogramma zoals Postman.
Controleer het token op jwt.io om het volgende te controleren:
- De
audclaim komt overeen met uw geconfigureerde doelgroep - De
issclaim komt overeen met uw geconfigureerde verlener - De
rolesclaim bevat de verwachte waarden
- De
Roep de API aan:
curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>"Als u een aangepaste rol wilt gebruiken, neemt u de
X-MS-API-ROLEheader op:curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>" \ -H "X-MS-API-ROLE: admin"
JWT-validatiedetails
Data API Builder valideert deze aspecten van de JWT:
| Controle | Description |
|---|---|
| handtekening | Gevalideerd met behulp van ondertekeningssleutels die zijn gedetecteerd via de geconfigureerde jwt.issuer instantie (OpenID Connect-metagegevens/JWKS) |
| Uitgever | Moet exact overeenkomen met jwt.issuer de configuratie |
| Audiëntie | Moet exact overeenkomen met jwt.audience de configuratie |
| Vervaldatum | Token mag niet verlopen zijn (exp claim) |
| Niet eerder dan | Token moet geldig zijn (nbf claim, indien aanwezig) |
Probleemoplossingsproces
| Symptoom | Mogelijke oorzaak | Solution |
|---|---|---|
401 Unauthorized |
Verlener komt niet overeen | Controleer of de iss claim precies overeenkomt (inclusief afsluitende slash) |
401 Unauthorized |
Doelgroep komt niet overeen | Controleer of de aud claim overeenkomt met uw geconfigureerde waarde |
401 Unauthorized |
Token is verlopen | Een nieuw token verkrijgen |
401 Unauthorized |
Metagegevens zijn niet beschikbaar | Zorg ervoor dat DAB kan <issuer>/.well-known/openid-configuration bereiken |
403 Forbidden |
Rol niet in token | De rol toevoegen aan uw IdP-configuratie |
403 Forbidden |
Rollenclaim ontbreekt | Uw IdP configureren om een roles claim op te nemen |
403 Forbidden |
Verkeerde claimnaam | DAB maakt gebruik van claimtype roles (vast, niet configureerbaar) |
Belangrijk
DAB gebruikt momenteel het claimtype roles voor alle rolcontroles. Deze waarde is vastgelegd en kan niet worden gewijzigd in groups, permissionsof andere claimnamen. Configureer uw id-provider om rollen uit te zenden voor een claim met de naam roles.
Algemene formaten voor issuers
| Provider | Formaat van uitgever |
|---|---|
| Okta |
https://<domain>.okta.com of https://<domain>.okta.com/oauth2/default |
| Verificatie0 |
https://<tenant>.auth0.com/ (let op de afsluitende slash) |
| Azure AD B2C | https://<tenant>.b2clogin.com/<tenant-id>/v2.0/ |
| Keycloak | https://<host>/realms/<realm> |
Volledig configuratievoorbeeld
Okta-configuratie
{
"$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-configuratie
{
"$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": ["*"]
}
]
}
}
}