Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Daten-API-Generator unterstützt Identitätsanbieter von Drittanbietern über den benutzerdefinierten Authentifizierungsanbieter. Verwenden Sie diesen Ansatz, wenn Ihre Organisation Okta, Auth0 oder einen anderen OAuth 2.0/OpenID Connect-kompatiblen Identitätsanbieter verwendet.
Authentifizierungsfluss
Mit einem benutzerdefinierten Identitätsanbieter verarbeitet Ihre Client-App die Benutzerauthentifizierung und sendet dann das Zugriffstoken an den Daten-API-Generator:
| Phase | Folge |
|---|---|
| Benutzerauthentifizierung | Der Benutzer meldet sich über den Identitätsanbieter an (Okta, Auth0 usw.) |
| Tokenerwerb | Client-App empfängt ein Zugriffstoken vom IdP |
| API-Aufruf | Der Client sendet das Token an DAB im Authorization Header. |
| Überprüfung | DAB überprüft JWT (Aussteller, Zielgruppe, Signatur) |
| Autorisierung | DAB extrahiert Rollen und wertet Berechtigungen aus. |
Voraussetzungen
- Ein Konto mit Ihrem Identitätsanbieter (Okta, Auth0 usw.)
- Eine Anwendung, die in Ihrem Identitätsanbieter registriert ist
- Installierte CLI des Daten-API-Generators (Installationshandbuch)
- Eine vorhandene
dab-config.jsonmit mindestens einer Entität
Kurzreferenz
| Setting | Wert |
|---|---|
| Provider | Custom |
| Erforderlich für die Überprüfung |
iss, aud, expgültige Signatur |
| Erforderlich für die Autorisierung |
roles Anspruch, der die ausgewählte Rolle enthält |
| Token-Header | Authorization: Bearer <token> |
| Rollenanspruchstyp |
roles (behoben, nicht konfigurierbar) |
| Rollenauswahl-Kopfzeile | X-MS-API-ROLE |
Schritt 1: Konfigurieren Ihres Identitätsanbieters
Die genauen Schritte hängen von Ihrem Anbieter ab. Hier sind die wichtigsten Werte, die Sie benötigen:
Zu erfassende Werte
| Wert | Wo sie zu finden ist | Syntaxelemente |
|---|---|---|
| Aussteller-URL | Dokumentation des Anbieters oder OAuth-Metadatenendpunkts | DAB jwt.issuer (verwendet als JWT Authority) |
| Publikum | Client-ID Ihrer Anwendung oder benutzerdefinierte API-ID | DAB jwt.audience |
Hinweis
DAB verwendet die konfigurierte jwt.issuer als JWT Authority. Signaturschlüssel werden automatisch über standardmäßige OpenID Connect-Metadaten (in der Regel <issuer>/.well-known/openid-configuration) ermittelt.
Okta-Beispiel
- Melden Sie sich bei der Okta Admin Console an.
- Navigieren Sie zu Anwendungen>Anwendungen.
- Erstellen oder Auswählen einer Anwendung.
- Notieren Sie sich die Client-ID (als Zielgruppe verwenden).
- Ihr Aussteller ist in der Regel
https://<your-domain>.okta.com.
Auth0-Beispiel
- Melden Sie sich beim Auth0-Dashboard an.
- Navigieren Sie zuAnwendungs-APIs>.
- Erstellen oder Auswählen einer API.
- Notieren Sie sich den Bezeichner (zur Verwendung als Zielgruppe).
- Ihr Aussteller ist
https://<your-tenant>.auth0.com/.
Von Bedeutung
Der Daten-API-Generator verwendet einen festen Anspruchstyp roles für die rollenbasierte Autorisierung. Dieser Wert kann nicht konfiguriert werden. Wenn Ihr Identitätsanbieter Rollen in einem anderen Anspruch ausgibt (wie groups oder permissions), konfigurieren Sie Ihren Anbieter so, dass er auch einen roles Anspruch ausgibt, oder führen Sie eine Aktion nach der Anmeldung durch, um Werte in einen roles Anspruch zu kopieren.
Schritt 2: Konfigurieren des Daten-API-Generators
Legen Sie den Authentifizierungsanbieter auf Custom fest und konfigurieren Sie die JWT-Einstellungen.
Befehlszeilenschnittstelle (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>/"
Resultierende Konfiguration
{
"runtime": {
"host": {
"authentication": {
"provider": "Custom",
"jwt": {
"audience": "<your-api-identifier>",
"issuer": "https://<your-issuer>/"
}
}
}
}
}
Schritt 3: Konfigurieren von Entitätsberechtigungen
Definieren Sie Berechtigungen für die Rollen, die Ihr Identitätsanbieter zuweist:
Befehlszeilenschnittstelle (CLI)
# Allow authenticated users to read
dab update Book \
--permissions "authenticated:read"
# Allow users with 'admin' role full access
dab update Book \
--permissions "admin:*"
Resultierende Konfiguration
{
"entities": {
"Book": {
"source": "dbo.Books",
"permissions": [
{
"role": "authenticated",
"actions": ["read"]
},
{
"role": "admin",
"actions": ["*"]
}
]
}
}
}
Schritt 4: Konfigurieren von Rollen in Ihrem Identitätsanbieter
DAB erwartet Rollen in einem roles Anspruch. Konfigurieren Sie Ihren Identitätsanbieter, um diesen Anspruch einzuschließen.
Okta: Hinzufügen von Gruppen als Rollen
- Wechseln Sie in der Okta-Verwaltungskonsole zurSicherheits-API>.
- Wählen Sie Ihren Autorisierungsserver aus.
- Wechseln Sie zur Registerkarte "Ansprüche ".
- Hinzufügen eines Anspruchs:
-
Name:
roles - In Tokentyp einschließen: Zugriffstoken
- Werttyp: Gruppen
- Filter: Auswählen der einzuschließden Gruppen
-
Name:
Auth0: Hinzufügen von Rollen mit einer Aktion
- Wechseln Sie im Auth0-Dashboard zu "Aktionsbibliothek>".
- Erstellen Sie eine neue Aktion (Post Login Trigger).
- Fügen Sie Code hinzu, um Rollen einzuschließen:
exports.onExecutePostLogin = async (event, api) => {
const roles = event.authorization?.roles || [];
if (roles.length > 0) {
api.accessToken.setCustomClaim('roles', roles);
}
};
- Stellen Sie die Aktion bereit, und fügen Sie sie Ihrem Anmeldeablauf hinzu.
Tipp
Ausführliche Anleitungen zum Konfigurieren von JWT-Ansprüchen mit Okta finden Sie unter Implementieren von Advanced JWT Claims mit dem SDK von Okta.
Schritt 5: Testen der Konfiguration
Starten des Daten-API-Generators:
dab startRufen Sie ein Token von Ihrem Identitätsanbieter ab. Verwenden Sie das SDK Ihres Anbieters oder ein Tool wie Postman.
Überprüfen Sie das Token bei jwt.io , um Folgendes zu überprüfen:
- Der
audAnspruch entspricht Ihrer konfigurierten Zielgruppe. - Der
issClaim stimmt mit Ihrem konfigurierten Herausgeber überein. - Der
rolesAnspruch enthält die erwarteten Werte.
- Der
Aufrufen der API:
curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>"Um eine benutzerdefinierte Rolle zu verwenden, schließen Sie die
X-MS-API-ROLEKopfzeile ein:curl -X GET "http://localhost:5000/api/Book" \ -H "Authorization: Bearer <your-token>" \ -H "X-MS-API-ROLE: admin"
JWT-Überprüfungsdetails
Der Daten-API-Generator überprüft diese Aspekte des JWT:
| Prüfen | Description |
|---|---|
| Signature | Überprüft mithilfe von Signaturschlüsseln, die über die konfigurierte jwt.issuer Autorität ermittelt wurden (OpenID Connect-Metadaten / JWKS) |
| Emittent | Muss genau mit der Konfiguration übereinstimmen jwt.issuer |
| Publikum | Muss genau mit der Konfiguration übereinstimmen jwt.audience |
| Ablauf | Token darf nicht abgelaufen sein (exp claim) |
| Nicht vorher | Token muss gültig sein (nbf Anspruch, falls vorhanden) |
Problembehandlung
| Symptom | Mögliche Ursache | Lösung |
|---|---|---|
401 Unauthorized |
Ausstellerkonflikt | Überprüfen Sie, ob der iss Claim genau übereinstimmt (einschließlich des nachgestellten Schrägstrichs) |
401 Unauthorized |
Benutzergruppenkonflikt | Überprüfen Sie, ob der aud Anspruch ihrem konfigurierten Wert entspricht. |
401 Unauthorized |
Token abgelaufen | Abrufen eines neuen Tokens |
401 Unauthorized |
Metadaten nicht verfügbar | Sicherstellen, dass DAB erreichbar ist <issuer>/.well-known/openid-configuration |
403 Forbidden |
Rolle nicht im Token | Hinzufügen der Rolle zur IdP-Konfiguration |
403 Forbidden |
Fehlende rollenspezifische Anforderung | Konfigurieren Sie Ihren IdP, um eine roles Anspruch einzuschließen |
403 Forbidden |
Falscher Anspruchsname | DAB verwendet Anspruchstyp roles (fest, nicht konfigurierbar) |
Von Bedeutung
DAB verwendet derzeit den Claimtyp roles für alle Rollenüberprüfungen. Dieser Wert ist hartcodiert und kann nicht in groups, permissionsoder andere Anspruchsnamen geändert werden. Konfigurieren Sie Ihren Identitätsanbieter so, dass Rollen in einem Anspruch mit dem Namen roles ausgegeben werden.
Allgemeine Ausstellerformate
| Provider | Ausstellerformat |
|---|---|
| Okta |
https://<domain>.okta.com oder https://<domain>.okta.com/oauth2/default |
| Auth0 |
https://<tenant>.auth0.com/ (beachten Sie den nachgestellten Schrägstrich) |
| Azure AD B2C | https://<tenant>.b2clogin.com/<tenant-id>/v2.0/ |
| Keycloak | https://<host>/realms/<realm> |
Vollständiges Konfigurationsbeispiel
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": ["*"]
}
]
}
}
}