Überblick
Advanza ist eine mandantenfähige SaaS-Marketingplattform, die OpenID Connect (OIDC) und OAuth 2.0 für sichere Authentifizierung und Single Sign-On (SSO) unterstützt. Dieser Leitfaden behandelt unterstützte Flows, Endpunkte, Scopes und Best Practices für die Integration der Advanza-Authentifizierung in deine Anwendungen.
Protokoll: OpenID Connect 1.0 (aufbauend auf dem OAuth 2.0 Authorization Code Grant)
Provider: Advanza (über OpenIddict 5.x)
Mandantenfähigkeit: Vollständig unterstützt – jede Organisation ist ein eigener Mandant (Tenant)
Sicherheit: HTTPS erforderlich, PKCE für SPAs empfohlen, Zertifikate für vertrauliche Clients
Unterstützte Authentifizierungs-Flows
Authorization Code Flow (empfohlen)
Der OAuth-2.0-Authorization-Code-Flow ist der empfohlene und sicherste Flow für die meisten Anwendungen, einschließlich Webanwendungen und Single-Page-Applications (SPAs). Er nutzt PKCE (Proof Key for Code Exchange) für öffentliche Clients, um Angriffe durch Abfangen des Authorization Code zu verhindern.
Am besten geeignet für: Webanwendungen, SPAs, mobile Apps, Drittanbieter-Integrationen
Refresh Token Flow
Nutze Refresh Tokens, um neue Access Tokens zu erhalten, ohne dass sich der Nutzer erneut anmelden muss. Refresh Tokens sind 14 Tage gültig und können rotiert werden, um die Sicherheit zu erhalten.
Am besten geeignet für: Langlebige Sitzungen, Hintergrunddienste, Offline-Zugriff
Client Credentials Flow (Legacy)
Der OAuth-2.0-Resource-Owner-Password-Credentials-Flow wird aus Gründen der Abwärtskompatibilität mit Legacy-Integrationen unterstützt. Neue Integrationen sollten stattdessen den Authorization Code Flow verwenden.
Am besten geeignet für: Legacy-Anwendungen, interne Tools (für neue Entwicklungen nicht empfohlen)
API-Endpunkte
Alle Endpunkte sind gehostet unter https://api.advanza.ai
Authorization-Endpunkt
GET /connect/authorize
Startet den OAuth-Autorisierungs-Flow. Leitet den Nutzer zur Anmeldung bei seinem Identity Provider weiter (Microsoft, Google oder E-Mail/Passwort).
Query-Parameter:
client_id(erforderlich): Deine Anwendungs-IDredirect_uri(erforderlich): URL, an die nach der Authentifizierung weitergeleitet wirdresponse_type(erforderlich): Muss 'code' seinscope(erforderlich): Durch Leerzeichen getrennte Liste von Scopes (openid, email, profile, offline_access, roles)code_challenge(erforderlich für SPA): PKCE Code Challengecode_challenge_method(erforderlich zusammen mit code_challenge): 'S256'state(empfohlen): Zufällige Zeichenfolge zum Schutz vor CSRF-Angriffentenant_id(optional): Bestimmter Mandant, in dem authentifiziert werden soll
Token-Endpunkt
POST /connect/token
Tauscht einen Authorization Code gegen Access Token, ID Token und optionales Refresh Token.
Anfrageformat: application/x-www-form-urlencoded
Parameter:
grant_type(erforderlich): 'authorization_code', 'refresh_token' oder 'password'code(erforderlich für Authorization Code Flow): Authorization Code von /authorizeclient_id(erforderlich): Deine Anwendungs-IDclient_secret(erforderlich): Dein Anwendungs-Secret (vertraulich behandeln)redirect_uri(erforderlich): Muss mit der /authorize-Anfrage übereinstimmencode_verifier(erforderlich für SPA): PKCE Code Verifierrefresh_token(für Refresh-Flow): Das auszutauschende Refresh Tokenusername & password(für Password-Flow): Nutzeranmeldedaten
Token-Introspection-Endpunkt
POST /connect/introspect
Prüft und liest den Inhalt eines Access Tokens oder Refresh Tokens aus.
OpenID-Konfiguration
GET /.well-known/openid-configuration
Standard-OIDC-Metadaten-Endpunkt. Liefert Discovery-Informationen einschließlich Endpunkten, öffentlichen Schlüsseln, unterstützten Scopes und Grant-Types.
Scopes
Scopes werden über den scope Parameter in der Autorisierungsanfrage angefordert:
openid (erforderlich)
Fordert ein ID Token mit den Identitätsinformationen des Nutzers an (Subject Claim, Name, Tenant-ID usw.)
Fordert E-Mail-Adresse und E-Mail-Verifizierungsstatus des Nutzers an
profile
Fordert Profilinformationen des Nutzers an: name, given_name, family_name
offline_access
Fordert ein Refresh Token an, um den Zugriff ohne erneute Authentifizierung zu verlängern
roles
Fordert die Rollen/Berechtigungen des Nutzers an (z. B. „Owner“, „Editor“, „Viewer“)
Mindest-Scope für die Anmeldung: openid email profile
Beispiel: Authorization Code Flow mit PKCE
Dieses Beispiel zeigt den empfohlenen Flow für Single-Page-Applications (SPAs) und mobile Apps.
Schritt 1: PKCE Challenge erzeugen
Erstelle clientseitig einen Code Verifier und eine Code Challenge:
// 1. Generate random code verifier (43-128 characters)
const codeVerifier = generateRandomString(128);
// 2. Create code challenge via SHA256 hash
const codeChallenge = await crypto.subtle.digest('SHA-256',
new TextEncoder().encode(codeVerifier)
);
// 3. Base64-URL encode the challenge
const codeChallengeB64 = base64UrlEncode(codeChallenge);
// Store codeVerifier in sessionStorage for Step 3
sessionStorage.setItem('pkce_verifier', codeVerifier);Schritt 2: Weiterleitung zum Authorization-Endpunkt
Leite den Nutzer zur Anmeldung weiter:
GET /connect/authorize?
client_id={your_app_id}
&redirect_uri=https://your-app.com/callback
&response_type=code
&scope=openid email profile
&code_challenge={pkce_challenge}
&state={random_state}Der Nutzer wird zu seinem Identity Provider weitergeleitet (Microsoft, Google oder E-Mail/Passwort), schließt die Authentifizierung ab und wird zurück zu deiner redirect_uri mit einem Authorization Code weitergeleitet.
Schritt 3: Code gegen Tokens eintauschen
Tausche von deinem Backend aus den Authorization Code ein:
POST /connect/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code={auth_code}
&client_id={your_app_id}
&client_secret={your_app_secret}
&redirect_uri=https://your-app.com/callback
&code_verifier={pkce_verifier}Schritt 4: Token-Antwort
Bei Erfolg erhältst du:
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "DefxA1234567890...",
"id_token": "eyJhbGciOiJSUzI1NiIs..."
}Schritt 5: ID Token verifizieren
Validiere die Signatur des ID Tokens mit dem öffentlichen Schlüssel von /.well-known/openid-configuration, prüfe die Issuer- und Audience-Claims und extrahiere die Nutzerinformationen.
Token Claims
ID-Token-Claims
Das ID Token (JWT) enthält die Identitätsinformationen des Nutzers:
{
"sub": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@company.com",
"email_verified": true,
"name": "John Doe",
"given_name": "John",
"family_name": "Doe",
"tenant_id": "12345678-1234-1234-1234-123456789012",
"iss": "https://api.advanza.ai",
"aud": "your_app_id",
"iat": 1234567890,
"exp": 1234571490
}Wichtige Claims:
sub: Eindeutige Nutzer-ID (Guid)email: E-Mail-Adresse des Nutzersemail_verified: Ob die E-Mail-Adresse verifiziert istname, given_name, family_name: Name des Nutzerstenant_id: Aktiver Mandant/Organisation des Nutzersiss: Token-Aussteller (immer https://api.advanza.ai)aud: Vorgesehene Zielgruppe (deine Anwendungs-ID)iat: Ausstellungszeitpunkt des Tokens (Unix-Zeitstempel)exp: Ablauf des Tokens (Unix-Zeitstempel)
Access-Token-Claims
Das Access Token (JWT) enthält die Autorisierungsinformationen:
{
"sub": "550e8400-e29b-41d4-a716-446655440000",
"email": "user@company.com",
"name": "John Doe",
"tenant_id": "12345678-1234-1234-1234-123456789012",
"roles": ["Owner"],
"scope": "openid email profile offline_access roles",
"iss": "https://api.advanza.ai",
"aud": "your_app_id",
"iat": 1234567890,
"exp": 1234571490
}Wichtige Claims:
sub: Nutzer-IDemail, name: Nutzerinformationentenant_id: Aktiver Mandant (für Multi-Tenancy-Routing verwenden)roles: Rollen des Nutzers im Mandantenscope: Gewährte Scopesexp: Ablauf (typischerweise 1 Stunde)
Access Token verwenden für: Im Authorization-Header einfügen (Authorization: Bearer {access_token}), wenn Advanza-APIs oder dein Backend aufgerufen werden.
Mandantenfähigkeit
Advanza ist eine mandantenfähige Plattform. Jeder Nutzer kann Mitglied mehrerer Organisationen (Mandanten) sein. Der tenant_id Claim in ID Token und Access Token gibt den aktiven Mandantenkontext des Nutzers an.
Standardmandant
Bei der ersten Anmeldung wird dem Nutzer ein Standardmandant zugewiesen. Der tenant_id Claim wird mit der ID dieses Mandanten befüllt.
Mandanten wechseln
Nutzer mit mehreren Mandantenmitgliedschaften können den Mandanten wechseln, indem sie den gewünschten tenant_id Parameter an den Authorization-Endpunkt übergeben:
GET /connect/authorize?
client_id={your_app_id}
&redirect_uri=https://your-app.com/callback
&response_type=code
&scope=openid email profile
&tenant_id=12345678-1234-1234-1234-123456789012
&code_challenge={pkce_challenge}Routing nach Mandant
Nutze den tenant_id Claim, um Anfragen in deinem Backend an den richtigen Mandantenkontext weiterzuleiten:
// Extract tenant from token claims
const tenantId = tokenClaims.tenant_id;
// Route request to tenant context
const tenantContext = getTenantContext(tenantId);
const result = await performAction(tenantContext, action);Best Practices für die Sicherheit
HTTPS in der Produktion verwenden
Alle OAuth-Anfragen müssen HTTPS verwenden, um Zugangsdaten und Tokens zu schützen.
PKCE für SPAs und mobile Apps
Verwende für öffentliche Clients immer PKCE (Proof Key for Code Exchange). Das verhindert Angriffe durch Abfangen des Authorization Code.
Client Secret vertraulich behandeln
Gib dein Client Secret niemals in clientseitigem Code, Logs oder der Versionskontrolle preis. Verwende es nur in sicherer Backend-zu-Backend-Kommunikation.
state-Parameter validieren
Erzeuge und validiere immer den state Parameter, um CSRF-Angriffe zu verhindern.
Token-Signaturen verifizieren
Validiere die Signaturen von ID Token und Access Token immer mit dem öffentlichen Schlüssel des OIDC-Konfigurations-Endpunkts, bevor du ihrem Inhalt vertraust.
Refresh Tokens sicher aufbewahren
Speichere Refresh Tokens sicher (HttpOnly-Cookies oder sicherer Speicher, nicht localStorage). Lege angemessene Ablaufzeiten fest.
Ablauf von Tokens behandeln
Access Tokens laufen nach 60 Minuten ab. Implementiere eine Token-Refresh-Logik, um unterbrechungsfreien Zugriff zu erhalten.
Support
Bei Fragen, Problemen oder Unterstützung bei der Integration wende dich bitte an unser Support-Team:
E-Mail: support@advanza.ai
Dokumentation: https://advanza.ai/docs
Status: https://status.advanza.ai