Authagonal

Documentation

Everything you need to get started with Authagonal — from creating your first tenant to wiring SSO, SCIM, and custom branding.

Erste Schritte

Authagonal stellt jedem Mandanten einen vollständig standardkonformen OIDC-Server bereit. Jeder Mandant erhält seine eigene Issür-URL, sein eigenes Discovery-Dokument und eigene Token-Endpunkte -- keine gemeinsam genutzte Infrastruktur zwischen Mandanten. Sie können in unter 5 Minuten von null zu einem funktionierenden Anmeldefluss gelangen.

Mandant erstellen

Registrieren Sie sich auf authagonal.io und wählen Sie einen Slug für Ihren Mandanten. Der Slug wird Ihre Issür-Domain: {slug}.authagonal.io. Nach der Kontörstellung verifizieren Sie Ihre E-Mail-Adresse, um den Mandanten zu aktivieren.

Authagonal signup page showing tenant slug input and email verification

Wählen Sie bei der Registrierung einen eindeutigen Slug für Ihren Mandanten

Client registrieren

Navigieren Sie zu Clients in der Portal-Seitenleiste und klicken Sie auf Erstellen. Geben Sie eine clientId und einen clientName für Ihre Anwendung ein. Konfigurieren Sie dann mindestens eine Redirect-URI -- dorthin werden Benutzer nach der Authentifizierung weitergeleitet. Beispiel: https://app.example.com/callback.

Client creation form with clientId, clientName, and redirect URI fields

Neuen OAuth-Client im Portal registrieren

Lokale Entwicklung

Verwenden Sie http://localhost:3000/callback als Redirect-URI für die lokale Entwicklung. Authagonal erlaubt nicht-HTTPS-Redirect-URIs für localhost-Ursprünge.

Ihre erste Anmeldung

Der schnellste Weg zur Integration ist mit oidc-client-ts, einer leichtgewichtigen OIDC-Client-Bibliothek für JavaScript- und TypeScript-Anwendungen.

oidc-client-ts integration
import { UserManager } from 'oidc-client-ts';

const mgr = new UserManager({
  authority: 'https://acme.authagonal.io',
  client_id: 'my-app',
  redirect_uri: 'https://app.example.com/callback',
  response_type: 'code',
  scope: 'openid profile email',
});

// Redirect to login
mgr.signinRedirect();

// On callback page
const user = await mgr.signinRedirectCallback();
console.log(user.profile); // { sub, email, name, ... }

Wenn Sie einen minimalen Ansatz ohne Bibliothek bevorzugen, können Sie den Standard-OAuth 2.0-Authorization-Code-Flow mit einfachem fetch verwenden:

Minimal fetch-based flow
// 1. Redirect the user to the authorization endpoint
const authorizeUrl = new URL('https://acme.authagonal.io/connect/authorize');
authorizeUrl.searchParams.set('client_id', 'my-app');
authorizeUrl.searchParams.set('redirect_uri', 'https://app.example.com/callback');
authorizeUrl.searchParams.set('response_type', 'code');
authorizeUrl.searchParams.set('scope', 'openid profile email');
authorizeUrl.searchParams.set('code_challenge', codeChallenge);
authorizeUrl.searchParams.set('code_challenge_method', 'S256');
window.location.href = authorizeUrl.toString();

// 2. On the callback page, exchange the code for tokens
const res = await fetch('https://acme.authagonal.io/connect/token', {
  method: 'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body: new URLSearchParams({
    grant_type: 'authorization_code',
    code: new URLSearchParams(window.location.search).get('code')!,
    redirect_uri: 'https://app.example.com/callback',
    client_id: 'my-app',
    code_verifier: codeVerifier,
  }),
});

const tokens = await res.json();
// tokens.id_token, tokens.access_token, tokens.refresh_token
Authagonal login page with email and password fields, branded with tenant logo

Die Standard-Anmeldeseite für Ihren Mandanten

Sandbox-Modus

Testen Sie Ihre Integration zürst im Sandbox-Modus. Sandbox-Mandanten verwenden eine separate URL ({slug}-sandbox.authagonal.io) und können jederzeit von der Produktion aktualisiert werden, ohne Live-Benutzer zu beeinträchtigen.

Dashboard

Das Portal-Dashboard gibt Ihnen einen Echtzeit-Überblick über Ihren Mandanten. Es zeigt die wichtigsten Metriken -- Benutzerwachstum, Authentifizierungsaktivität und schnelle Navigation zu allen Funktionen im Portal.

Übersicht

Oben im Dashboard sehen Sie eine Willkommensnachricht zusammen mit Ihrer aktüllen Gesamtbenutzerzahl. Darunter zeigt ein Täglich aktive Benutzer-Diagramm eine 7-Tage-Historie eindeutiger Benutzer, die sich täglich authentifiziert haben, und gibt Ihnen einen schnellen Überblick über Engagement-Trends.

Full dashboard view showing welcome banner, user count, and Daily Active Users line chart

Der Dashboard-Startbildschirm mit DAU-Diagramm und Aktivitätsübersicht

Aktivitätsmetriken

Das Aktivitätsmetriken-Panel zeigt vier Statistikkarten mit einer Zusammenfassung wichtiger Authentifizierungsereignisse:

  • Erfolgreiche Anmeldungen -- insgesamt abgeschlossene Authentifizierungsabläufe
  • Fehlgeschlagene Anmeldungen -- falsche Anmeldedaten, gesperrte Konten oder Richtlinienablehnungen
  • Aktive Benutzer -- eindeutige Benutzer, die sich im ausgewählten Zeitraum authentifiziert haben
  • SCIM-Operationen -- Benutzer- und Gruppenbereitstellungsereignisse von verbundenen IdPs

Verwenden Sie die Zeitbereichsfilter, um zwischen 24 Stunden, 3 Tagen, 7 Tagen und 30 Tagen zu wechseln. Alle Statistikkarten und Diagramme aktualisieren sich entsprechend dem ausgewählten Fenster.

Activity metrics panel with four stat cards and a time range filter bar showing 24h, 3d, 7d, and 30d options

Aktivitätsmetriken mit konfigurierbarem Zeitbereich

Schnellnavigation

Unterhalb des Metriken-Panels verlinken Navigationskarten direkt zu allen wichtigen Funktionen: Clients, Benutzer, Gruppen, Rollen, SSO, SCIM, Branding und Einstellungen. Jede Karte zeigt eine kurze Beschreibung, damit sich neue Teammitglieder schnell orientieren können.

Clients

OAuth-Clients repräsentieren die Anwendungen, die Benutzer über Ihren Mandanten authentifizieren. Jeder Client hat seine eigene Konfiguration für Redirect-URIs, Scopes, Grant-Typen, Token-Laufzeiten und MFA-Richtlinie.

Client-Liste

Die Clients-Seite zeigt eine Tabelle aller registrierten Clients. Jede Zeile zeigt die clientId, den Anzeigenamen, erlaubte Grant-Typen als farbige Badges und ob PKCE aktiviert ist. Klicken Sie auf eine Zeile, um den vollständigen Konfigurationseditor zu oeffnen.

Clients table showing clientId, name, grant type badges, and PKCE status for each registered application

Client-Liste mit Grant-Type-Badges und PKCE-Indikatoren

Client erstellen

Klicken Sie auf Client erstellen, um eine neue Anwendung zu registrieren. Sie müssen zwei Felder angeben:

  • clientId -- ein eindeutiger Bezeichner für den Client (z. B. my-spa)
  • clientName -- ein lesbarer Anzeigename
Create client form with clientId and clientName input fields

Neuen OAuth-Client registrieren

Client löschen

Um einen Client zu löschen, oeffnen Sie die Client-Konfiguration und klicken Sie auf die Schaltfläche Client löschen am Ende der Seite. Sie werden zur Bestätigung aufgefordert, bevor der Client dauerhaft entfernt wird. Alle aktiven Sitzungen und Tokens für den gelöschten Client werden sofort ungültig.

Client-Konfigurationsreferenz

Jeder Client verfügt über einen umfassenden Satz von Konfigurationsoptionen, die in mehrere Abschnitte gegliedert sind.

Allgemeine Einstellungen

EinstellungBeschreibungStandard
clientNameAnzeigename, der in Zustimmungsbildschirmen und im Portal angezeigt wird
requirePkceProof Key for Code Exchange für Authorization-Code-Flows erforderlich machenAn
requireClientSecretClient-Secret für Token-Anfragen erforderlich machen (für öffentliche Clients wie SPAs deaktivieren)Aus
allowOfflineAccessDem Client erlauben, Refresh-Tokens über den offline_access-Scope anzufordernAus
alwaysIncludeUserClaimsInIdTokenAlle Benutzer-Claims direkt im ID-Token einschließen, anstatt einen UserInfo-Aufruf zu erfordernAus
includeGroupsInTokensDie Gruppenmitgliedschaften des Benutzers als groups-Claim im ID-Token einschließenAus

PKCE-Sicherheit

Das Deaktivieren von PKCE verringert die Sicherheit für Authorization-Code-Flows. Deaktivieren Sie dies nur für ältere Clients, die PKCE nicht unterstützen. Alle modernen Anwendungen sollten PKCE aktiviert lassen.

URIs

URI-Felder verwenden eine Tag-Eingabe -- geben Sie einen Wert ein und drücken Sie Enter oder Komma, um ihn hinzuzufügen. Klicken Sie auf das X eines Tags, um es zu entfernen.

EinstellungBeschreibung
redirectUrisErlaubte Callback-URLs nach der Authentifizierung. Müssen exakt mit dem redirect_uri-Parameter in Autorisierungsanfragen übereinstimmen.
postLogoutRedirectUrisErlaubte URLs für die Weiterleitung nach dem Logout.
allowedCorsOriginsErlaubte Origins für Cross-Origin-Anfragen an die Token- und UserInfo-Endpunkte.
URI configuration section showing tag inputs for redirect URIs, post-logout URIs, and CORS origins

Tag-Eingabefelder zur Konfiguration von URIs

Scopes & Grant-Typen

EinstellungOptionen
allowedScopesopenid profile email offline_access
allowedGrantTypesauthorization_code client_credentials refresh_token device_code

Token-Laufzeiten

EinstellungBeschreibungStandard
accessTokenLifetimeSecondsGültigkeitsdauer von Access-Tokens1800 (30 Min.)
identityTokenLifetimeSecondsGültigkeitsdauer von ID-Tokens300 (5 Min.)
authorizationCodeLifetimeSecondsGültigkeitsdauer von Authorization Codes für den Austausch300 (5 Min.)
absoluteRefreshTokenLifetimeSecondsMaximale Lebensdauer eines Refresh-Tokens unabhängig von der Aktivität2592000 (30 Tage)
slidingRefreshTokenLifetimeSecondsRefresh-Token-Ablauf wird bei jeder Verwendung zurückgesetzt, bis zur absoluten Lebensdauer1296000 (15 Tage)
Token lifetime configuration fields with numeric inputs for each lifetime setting

Token-Laufzeiten pro Client konfigurieren

Logout-URIs

Clients können sowohl Back-Channel- als auch Front-Channel-Logout-URIs registrieren. Beide sind optional — konfigurieren Sie das, was zu Ihrer Anwendung passt.

EinstellungBeschreibung
backChannelLogoutUriServer-zu-Server-POST mit einem signierten Logout-Token. Zuverlässig, auch wenn der Browser offline ist.
frontChannelLogoutUriWird in einem versteckten iframe beim Logout geladen, damit der Browser Cookies und Local Storage löscht.
frontChannelLogoutSessionRequiredWenn aktiviert, erhält die Logout-URL die Query-Parameter iss und sid, damit Ihre App den Logout mit der spezifischen Sitzung verknüpfen kann.

Beide kombinieren

Back-Channel stellt sicher, dass der Server benachrichtigt wird; Front-Channel löscht den Browser. Die meisten Apps profitieren davon, beide zu konfigurieren.

MFA-Richtlinie

Jeder Client kann die mandantenweite MFA-Richtlinie mit einer clientspezifischen Einstellung überschreiben. Das MFA-Richtlinien-Dropdown bietet drei Optionen:

RichtlinieVerhalten
DeaktiviertMFA wird für diesen Client nie abgefragt
AktiviertBenutzer können sich optional für MFA registrieren; sie werden bei der Anmeldung aufgefordert, wenn registriert
ErforderlichAlle Benutzer müssen MFA abschließen, um sich über diesen Client zu authentifizieren
MFA policy dropdown showing Disabled, Enabled, and Required options on the client configuration page

Clientspezifische MFA-Richtlinien-Überschreibung

Enterprise SSO

Enterprise SSO ermöglicht es Ihren Kunden, ihren eigenen Identity Provider mitzubringen. Authagonal unterstützt sowohl SAML 2.0- als auch OIDC-Federation mit domänbasiertem Routing, sodass Benutzer anhand ihrer E-Mail-Adresse automatisch zum richtigen IdP weitergeleitet werden.

SSO domain routing flow — shows how email domains are matched to SAML or OIDC identity providers

Domänbasiertes SSO-Routing

SAML 2.0-Verbindungen

Um eine SAML-Verbindung zu erstellen, navigieren Sie zur SSO-Seite und wählen Sie den SAML-Tab. Geben Sie Folgendes an:

FeldBeschreibung
connectionNameEin lesbarer Name für diese Verbindung (z. B. "Acme Corp Okta")
entityIdDie SAML Entity ID des externen Identity Providers
metadataUrlURL zum SAML-Metadaten-XML-Dokument des IdP

Wenn Sie die Verbindung speichern, ruft Authagonal das Metadatendokument ab und importiert das Signaturzertifikat des IdP, die SSO-Endpunkt-URL und das Name-Identifier-Format. Die Metadaten werden regelmäßig aktualisiert, um Zertifikatsrotationen zu berücksichtigen.

SAML connection creation form with fields for connection name, entity ID, and metadata URL

SAML 2.0 SSO-Verbindung erstellen

OIDC-Verbindungen

Um eine OIDC-Federation-Verbindung zu erstellen, wählen Sie den OIDC-Tab und geben Sie an:

FeldBeschreibung
connectionNameEin lesbarer Name für diese Verbindung
discoveryUrlDie OpenID Connect Discovery-URL (z. B. https://login.microsoftonline.com/{tenant}/v2.0/.well-known/openid-configuration)
clientIdDie beim externen IdP für diese Federation registrierte Client-ID
clientSecretDas Client-Secret für die Registrierung beim externen IdP
OIDC connection creation form with fields for connection name, discovery URL, client ID, and client secret

OIDC-Federation-Verbindung erstellen

Domain-Routing

Domain-Routing leitet Benutzer automatisch zum richtigen Identity Provider basierend auf ihrer E-Mail-Domain weiter. Wenn ein Benutzer seine E-Mail auf der Anmeldeseite eingibt, prüft Authagonal, ob der Domain-Teil (z. B. acme.com) mit einer konfigurierten SSO-Verbindung übereinstimmt. Falls ja, wird der Benutzer nahtlos zum IdP seiner Organisation weitergeleitet.

E-Mail-DomainSSO-AnbieterProtokoll
acme.comAcme Corp OktaSAML 2.0
contoso.comContoso Azure ADOIDC
example.orgExample OneLoginSAML 2.0
Domain routing table showing email domains mapped to SSO connections with protocol type

Domain-Routing ordnet E-Mail-Domains Identity Providern zu

SP-initiierter Flow

Der SP-initiierte Flow ist der Standard -- Benutzer starten auf Ihrer Anmeldeseite und werden automatisch zum richtigen IdP weitergeleitet. Benutzer können auch direkt zu einer bestimmten Verbindung verlinkt werden über /saml/{connectionId}/login oder /oidc/{connectionId}/login.

JIT-Bereitstellung

Standardmäßig erstellt Authagonal automatisch ein Konto, wenn sich ein Benutzer zum ersten Mal über SSO anmeldet und noch nicht in Ihrem Mandanten existiert (Just-In-Time-Bereitstellung). Dies kann pro Verbindung deaktiviert werden, indem Sie beim Erstellen oder Bearbeiten der Verbindung JIT-Bereitstellung deaktivieren ankreuzen.

Wenn die JIT-Bereitstellung deaktiviert ist, können sich nur Benutzer anmelden, die vorab bereitgestellt wurden -- über SCIM, die Benutzerseite des Portals oder die API. Unbekannte Benutzer erhalten einen access_denied-Fehler und werden aufgefordert, ihren Administrator zu kontaktieren.

Einstellung pro Verbindung

Die JIT-Bereitstellung wird pro SSO-Verbindung gesteuert, nicht mandantenweit. Sie können eine Verbindung haben, die JIT erlaubt (z. B. für eine Partnerorganisation, die ihre eigenen Benutzer verwaltet) und eine andere, die Vorab-Bereitstellung erfordert (z. B. für einen Enterprise-Kunden mit SCIM-Synchronisation).

Vor dem Rollout testen

Testen Sie SSO-Verbindungen im Sandbox-Modus, bevor Sie sie für Produktionsbenutzer ausrollen. So können Sie die IdP-Konfiguration, das Attribut-Mapping und das Domain-Routing überprüfen, ohne Live-Authentifizierungsabläufe zu beeinträchtigen.

Benutzer

Die Benutzerseite ermöglicht es Ihnen, alle Endbenutzer in Ihrem Mandanten zu verwalten. Sie können nach Benutzern suchen, deren Details anzeigen, neue Konten erstellen und sehen, wie jeder Benutzer bereitgestellt wurde.

Die Suchleiste unterstützt die Filterung nach E-Mail-Adresse oder Benutzer-ID. Die Suche ist mit 300ms Verzögerung entprellt, sodass Ergebnisse während der Eingabe aktualisiert werden, ohne die API zu überlasten. Ergebnisse werden mit 50 Benutzern pro Seite paginiert -- verwenden Sie die Navigationssteuerungen am Ende der Tabelle, um zwischen Seiten zu wechseln.

Benutzertabelle

Die Benutzertabelle zeigt die folgenden Spalten für jeden Benutzer:

SpalteBeschreibung
E-MailDie E-Mail-Adresse des Benutzers, mit einem Verifizierungsbadge angezeigt, wenn die E-Mail bestätigt wurde
Benutzer-IDDer dem Benutzer zugewiesene eindeutige Bezeichner
Vollständiger NameVor- und Nachname kombiniert
StatusActive oder Inactive — gibt an, ob das Konto aktiviert ist
MFAEnabled oder Off — ob Multi-Faktor-Authentifizierung registriert ist
QuelleSCIM oder Local — wie der Benutzer erstellt wurde
ErstelltDas Datum, an dem das Benutzerkonto erstellt wurde
User list table with columns for email, user ID, name, status, MFA, source, and created date

Die Benutzerliste mit Suchleiste und Seitenumbruch

Benutzer erstellen

Klicken Sie auf Benutzer erstellen, um einen neuen lokalen Benutzer hinzuzufügen. Das Formular erfordert:

FeldBeschreibung
emailDie E-Mail-Adresse des Benutzers (muss innerhalb des Mandanten eindeutig sein)
passwordAnfangspasswort (mindestens 8 Zeichen, muss der Passwortrichtlinie Ihres Mandanten entsprechen)
firstNameDer Vorname des Benutzers
lastNameDer Nachname des Benutzers
Create user form with email, password, first name, and last name fields

Neuen lokalen Benutzer erstellen

SCIM-bereitgestellte Benutzer

Über SCIM erstellte Benutzer sind mit einem "SCIM"-Badge gekennzeichnet und ihr Passwort kann nicht über das Portal geaendert werden. Ihr Lebenszyklus -- Erstellung, Aktualisierungen und Deaktivierung -- wird vollständig vom vorgelagerten Identity Provider verwaltet.

Benutzerdetails

Klicken Sie auf eine Zeile in der Benutzerliste, um die Detailseite zu öffnen. Dort können Sie Profildaten bearbeiten, Rollen verwalten, MFA zurücksetzen, benutzerdefinierte Attribute überprüfen und den Benutzer löschen.

Profil

Bearbeiten Sie E-Mail, Vor-/Nachname, Telefon, Unternehmen, externe ID und den Aktiv-Status des Benutzers. E-Mail-Änderungen müssen innerhalb des Mandanten eindeutig bleiben; die API gibt email_in_use zurück, wenn die Adresse belegt ist.

Rollen

Weisen Sie Rollen zu, die auf der Seite Rollen definiert sind. Rollenmitgliedschaften werden in ID- und Access-Tokens eingeschlossen, wenn der Client includeRolesInTokens aktiviert hat.

Multi-Faktor-Authentifizierung

Sehen Sie alle für den Benutzer registrierten MFA-Zugangsdaten — Authenticator-App (TOTP), WebAuthn/Passkeys und Wiederherstellungscodes — jeweils mit Registrierungs- und Letzter-Nutzung-Zeitstempeln. Entfernen Sie einzelne Zugangsdaten oder setzen Sie alle MFA zurück. Zurücksetzen zwingt den Benutzer, sich bei der nächsten Anmeldung neu zu registrieren.

Benutzerdefinierte Attribute

Beliebige Schlüssel-Wert-Daten, die dem Benutzer zugeordnet sind. Schlüssel müssen eindeutig sein. Attribute sind über die Benutzerprofil-API und SCIM verfügbar und können durch Konfiguration der userClaims eines benutzerdefinierten Scopes auf Access-Token-Claims abgebildet werden.

Benutzer löschen

Entfernt den Benutzer und alle seine MFA-Zugangsdaten dauerhaft. Geben Sie die E-Mail des Benutzers zur Bestätigung ein — es gibt kein Rückgängigmachen.

Gruppen

Gruppen ermöglichen es Ihnen, Benutzer zu organisieren und Gruppenmitgliedschaften in Tokens aufzunehmen. Gruppen können manüll im Portal erstellt oder automatisch über SCIM von einem externen Identity Provider bereitgestellt werden.

Gruppenliste

Die Gruppenseite zeigt alle Gruppen in Ihrem Mandanten mit den folgenden Informationen:

SpalteBeschreibung
GruppennameDer Anzeigename der Gruppe
MitgliederDie Anzahl der Benutzer, die derzeit in der Gruppe sind
QuelleSCIM oder Manual — wie die Gruppe erstellt wurde
ErstelltDas Datum, an dem die Gruppe erstellt wurde
Groups list table showing group name, member count, source badge, and created date

Gruppenliste mit Quellindikatoren

Gruppe erstellen

Klicken Sie auf Gruppe erstellen und geben Sie einen displayName für die Gruppe ein. Gruppennamen sollten beschreibend und innerhalb Ihres Mandanten eindeutig sein (z. B. "Engineering", "Billing Admins", "Beta Testers").

Gruppendetails & Mitglieder

Klicken Sie auf eine Gruppe, um die Detailansicht zu oeffnen. Hier können Sie alle aktüllen Mitglieder sehen und die Mitgliedschaft verwalten:

  • Mitglieder hinzufügen -- Geben Sie eine Benutzer-ID ein, um einen Benutzer zur Gruppe hinzuzufügen.
  • Mitglieder entfernen -- Klicken Sie auf die Entfernen-Schaltfläche neben einem Mitglied, um es einzeln zu entfernen.
Group detail view showing member list with user IDs and a field to add new members

Gruppenmitgliedschaft in der Detailansicht verwalten

Gruppen in Tokens

Wenn includeGroupsInTokens auf einem Client aktiviert ist, enthält das ID-Token einen groups-Claim mit den Gruppenmitgliedschaften des Benutzers. Jeder Eintrag enthält die Gruppen-id und den name:

groups claim in ID token
{
  "sub": "user-123",
  "email": "jane@acme.com",
  "groups": [
    { "id": "grp-001", "name": "Engineering" },
    { "id": "grp-002", "name": "Beta Testers" }
  ]
}

Pro Client aktivieren

Die Einstellung includeGroupsInTokens wird auf jedem Client einzeln konfiguriert. Navigieren Sie zu den allgemeinen Einstellungen des Clients, um sie zu aktivieren.

Rollen

Rollen unterstützen die rollenbasierte Zugriffskontrolle (RBAC) in Ihrer Anwendung. Definieren Sie Rollen in Authagonal, weisen Sie sie Benutzern zu und verwenden Sie den roles-Claim in Tokens, um die Autorisierung in Ihrer Anwendungslogik durchzusetzen.

Rollen verwalten

Die Rollenseite zeigt eine Tabelle aller definierten Rollen mit Inline-Bearbeitung. Jede Rolle hat:

SpalteBeschreibung
NameEin eindeutiger Bezeichner für die Rolle (z. B. "admin", "editor", "viewer")
BeschreibungEine lesbare Beschreibung dessen, was die Rolle gewährt
ErstelltDas Datum, an dem die Rolle erstellt wurde

Rolle erstellen

Klicken Sie auf Rolle erstellen und geben Sie einen Namen und eine Beschreibung an. Rollennamen sollten prägnant sein und einer einheitlichen Namenskonvention in Ihrer Anwendung folgen (z. B. Kleinschreibung mit Bindestrichen: billing-admin).

Inline-Bearbeitung

Rollen unterstützen die Inline-Bearbeitung direkt in der Tabelle. Klicken Sie auf das Stiftsymbol bei einer Rolle, um den Bearbeitungsmodus zu aktivieren -- die Felder für Name und Beschreibung werden bearbeitbar. Ändern Sie die Werte und klicken Sie dann auf das Häkchensymbol zum Speichern. Änderungen werden sofort wirksam.

Rolle löschen

Klicken Sie auf das Löschsymbol bei einer Rolle, um sie zu entfernen. Sie werden zur Bestätigung aufgefordert, bevor die Rolle dauerhaft gelöscht wird. Das Entfernen einer Rolle macht bestehende Tokens nicht rückwirkend ungültig -- die Rolle fehlt in neuen Tokens, die nach der Löschung ausgestellt werden.

Roles table with inline editing active, showing editable name and description fields with save and cancel icons

Inline-Bearbeitung von Rollen in der Rollentabelle

Rollen in Tokens

Einem Benutzer zugewiesene Rollen werden als roles-Claim im ID-Token aufgenommen. Ihre Anwendung kann diesen Claim lesen, um Autorisierungsentscheidungen zu treffen:

roles claim in ID token
{
  "sub": "user-123",
  "email": "jane@acme.com",
  "roles": ["admin", "billing-admin"]
}

SCIM-Bereitstellung

SCIM 2.0 (System for Cross-domain Identity Management) ermöglicht die automatische Benutzer- und Gruppenbereitstellung von Enterprise-Identity-Providern wie Okta, Azure AD, OneLogin und JumpCloud. Bei Konfiguration werden Benutzerkonten und Gruppenmitgliedschaften automatisch vom vorgelagerten IdP mit Ihrem Authagonal-Mandanten synchronisiert.

SCIM provisioning flow — shows user lifecycle events flowing from enterprise IdP through Authagonal SCIM API to your app via TCC webhooks

SCIM-Benutzerlebenszyklus-Synchronisation mit nachgelagerter Bereitstellung

Einrichtungsschritte

Befolgen Sie diese Schritte, um die SCIM-Bereitstellung für einen Client zu aktivieren:

  1. Client-Anwendung auswählen -- Wählen Sie den OAuth-Client, dem die SCIM-Bereitstellung zugeordnet wird.
  2. SCIM-Token generieren -- Geben Sie eine Beschreibung und einen Ablaufzeitraum in Tagen an und generieren Sie dann den Token.
  3. Token sofort kopieren -- Der Roh-Token-Wert wird nur einmal angezeigt. Kopieren Sie ihn, bevor Sie den Dialog schliessen.
  4. IdP konfigurieren -- Geben Sie in den SCIM-Einstellungen Ihres Identity Providers die Basis-URL und das Bearer-Token ein.
  5. Benutzersynchronisation testen -- Lösen Sie eine Testsynchronisation von Ihrem IdP aus und überprüfen Sie, ob Benutzer im Authagonal-Portal erscheinen.

SCIM-Basis-URL

Konfigurieren Sie Ihren Identity Provider mit der folgenden Basis-URL:

SCIM Base URL
https://{slug}.authagonal.io/scim/v2

Ersetzen Sie {slug} durch Ihren Mandanten-Slug.

SCIM configuration page showing client selector, token generation form, and base URL

SCIM-Einrichtungsseite mit Token-Generierung

Token-Verwaltung

SCIM-Tokens authentifizieren Bereitstellungsanfragen von Ihrem IdP. Sie können mehrere Tokens pro Client verwalten:

FeldBeschreibung
BeschreibungEin Label zur Identifizierung des Tokens (z. B. "Okta Production SCIM")
AblaufToken-Lebensdauer in Tagen (1 bis 3650). Leer lassen oder einen hohen Wert setzen für Tokens, die nicht häufig rotiert werden sollen.
StatusAktive Tokens sind in Verwendung. Widerrufene Tokens zeigen ein Revoked Badge an und können keine Anfragen mehr authentifizieren.

Um einen Token zu widerrufen, klicken Sie auf die Schaltfläche Widerrufen daneben. Widerrufene Tokens bleiben aus Audit-Gründen in der Liste sichtbar, akzeptieren aber sofort keine Anfragen mehr.

SCIM token list showing active and revoked tokens with description, expiry date, and revoke button

Token-Verwaltung mit Indikatoren für aktive und widerrufene Tokens

Token sofort kopieren

Der Roh-SCIM-Token wird bei der Erstellung nur einmal angezeigt. Kopieren Sie ihn sofort -- er kann später nicht abgerufen werden. Wenn Sie den Token verlieren, müssen Sie einen neuen generieren und Ihre IdP-Konfiguration aktualisieren.

Konnektivität testen

Überprüfen Sie, ob Ihre SCIM-Integration funktioniert, indem Sie den ServiceProviderConfig-Endpunkt abfragen:

Test SCIM connectivity
curl -H "Authorization: Bearer YOUR_TOKEN" \
  https://acme.authagonal.io/scim/v2/ServiceProviderConfig

Eine erfolgreiche Antwort gibt ein JSON-Dokument zurück, das die unterstützten SCIM-Funktionen beschreibt, einschliesslich Massenoperationen, Filterung und Passwortänderungsfähigkeit.

OAuth-Scopes

Scopes ermöglichen Clients, bestimmte Teile der Benutzerdaten oder Berechtigungen anzufordern. Authagonal unterstützt sowohl Standard-OIDC-Scopes als auch benutzerdefinierte Scopes für Ihre APIs.

Integrierte Scopes

ScopeBeschreibung
openidErforderlich für jeden OpenID-Connect-Flow. Gibt ein ID-Token aus.
profileLiefert Standard-Profilclaims (name, given_name, family_name).
emailLiefert E-Mail-Adresse und Verifizierungsstatus des Benutzers.
offline_accessGibt neben dem Access-Token auch ein Refresh-Token aus.

Benutzerdefinierte Scopes

Definieren Sie eigene Scopes auf der Scopes-Seite. Jeder Scope beschreibt eine Berechtigung oder Ressource, die ein Client anfordern kann (z. B. billing.read, orders.write).

FeldBeschreibung
nameDer Scope-Identifier, der in Token-Anfragen gesendet wird (z. B. billing.read).
displayNameBenutzerfreundliche Bezeichnung auf dem Zustimmungsbildschirm.
descriptionLängere Erklärung unter dem Anzeigenamen bei der Zustimmung.
userClaimsZusätzliche Claims, die dem Access-Token hinzugefügt werden, wenn der Scope gewährt wird.
showInDiscoveryDocumentWenn aktiviert, erscheint der Scope in /.well-known/openid-configuration.
emphasizeHebt den Scope auf der Zustimmungsseite als sensibel hervor.
requiredVerhindert, dass der Benutzer den Scope bei der Zustimmung abwählen kann.

Integration der Zustimmung

Clients mit RequireConsent: true fragen den Benutzer bei der ersten Anfrage. Das Löschen eines Scopes widerruft bereits ausgestellte Tokens nicht — widerrufen Sie diese bei Bedarf explizit.

Benutzerdefinierte Claims auf Tokens

Benutzerdefinierte Claims haben zwei Hälften. Die Quelle sind benutzerbezogene Daten: Jeder AuthUser besitzt ein customAttributes-Dictionary, das Sie über das Portal (Benutzer → Benutzer → Benutzerdefinierte Attribute), per SCIM oder über einen TCC-Provisioning-Hook befüllen können. Die Freigabe erfolgt pro Scope: Die userClaims-Liste jedes Scopes nennt die Schlüssel, die den Server verlassen dürfen.

Wenn ein Client Scopes anfordert, durchläuft Authagonal die gewährten Scopes, vereinigt deren userClaims-Listen und gibt nur diese Schlüssel aus den customAttributes des Benutzers aus. Unbekannte Schlüssel werden stillschweigend verworfen — ein Client kann ein Attribut nicht durch Erraten des Namens lesen. Standard-OIDC-Claims (sub, email, name usw.) folgen der Spezifikation und unterliegen nicht der Whitelist.

Example: project-scope claims on an access token
# 1. On the user (Portal → Users → {user} → Custom Attributes)
department = "engineering"
employee_id = "E-1042"
seat_tier = "enterprise"

# 2. On a custom scope (Portal → Scopes → projects.read)
name        = "projects.read"
userClaims  = ["department", "seat_tier"]   # <-- whitelist

# 3. Client requests scope=openid projects.read
# Decoded access token (relevant fields only):
{
  "sub": "u-9b…",
  "scope": "openid projects.read",
  "department": "engineering",
  "seat_tier":  "enterprise"
  // employee_id is NOT emitted — it's not in the whitelist for any granted scope.
}

Föderations-Claims haben Vorrang pro Sitzung

Wenn sich ein Benutzer über einen Upstream-IdP (SAML/OIDC SSO) anmeldet, fließen sitzungsbezogene Claims, die vom IdP eintreffen — z. B. ein aus einer SAML-Assertion gemapptes department-Attribut — durch dieselbe Scope-Whitelist, gewinnen aber bei Schlüsselkollisionen gegen die persistierten customAttributes. Sie werden auf den Tokens dieser Sitzung ausgegeben (und überleben Refresh-Rotationen), ohne in den Benutzerdatensatz zurückgeschrieben zu werden.

Scopes an Clients zuweisen

Fügen Sie erlaubte Scopes auf der Registerkarte Clients → Scopes & Grants hinzu. Ein Client kann nur Scopes anfordern, die ihm zugewiesen wurden; unbekannte Scopes werden mit invalid_scope abgelehnt.

Branding

Passen Sie das Erscheinungsbild der Anmeldeseiten Ihres Mandanten an. Branding-Einstellungen ermöglichen es Ihnen, das Authentifizierungserlebnis an die visülle Identität Ihres Produkts anzupassen -- von Logos und Farben bis hin zu erweiterten CSS-Überschreibungen.

Erscheinungsbild

EinstellungBeschreibung
appNameDer Anwendungsname, der in der Kopfzeile der Anmeldeseite und im Browser-Tab angezeigt wird
logoUrlURL zu Ihrem Logo-Bild. Wird oben auf der Anmeldeseite angezeigt. Empfohlene Größe: 200x60px oder ähnliches Seitenverhältnis.
primaryColorDie primäre Markenfarbe für Schaltflächen, Links und Fokuszustände. Einstellbar über eine Farbauswahl oder Hex-Eingabe. Eine Live-Vorschau aktualisiert sich, wenn Sie den Wert ändern.
customCssUrlURL zu einer externen CSS-Datei, die nach den Standardstilen geladen wird. Verwenden Sie diese für erweiterte Styling-Überschreibungen.
Branding appearance settings with app name input, logo URL field, color picker with hex input, and custom CSS URL field

Erscheinungseinstellungen mit Live-Farbvorschau

Kontaktinformationen

EinstellungBeschreibung
supportEmailEine Support-E-Mail-Adresse, die auf Anmeldeseiten angezeigt wird. Benutzer sehen diese, wenn sie Hilfe mit ihrem Konto benötigen.

Anmeldeseiten-Schalter

Steuern Sie, welche Elemente auf der Anmeldeseite Ihres Mandanten angezeigt werden:

SchalterBeschreibungStandard
showForgotPasswordDen "Passwort vergessen?"-Link im Anmeldeformular anzeigenAn
showRegistrationDen "Registrieren"-Link für Self-Service-Benutzerregistrierung anzeigenAn
showPoweredByDas "Powered by Authagonal"-Badge am Ende der Anmeldeseite anzeigenAn
A customized login page showing a branded logo, custom primary color on the sign-in button, and support email in the footer

Beispiel-Anmeldeseite mit angewendetem individüllem Branding

Eigenes CSS

Für vollständige Kontrolle über das Aussehen der Login-Seite geben Sie eine CSS-Datei-URL in Ihren Branding-Einstellungen an. Die Datei wird nach den Standard-Styles geladen, sodass Ihre Regeln Vorrang haben.

CSS-Custom-Properties

Die Login-Seite unterstützt CSS-Custom-Properties (Variablen) für häufige Überschreibungen. Setzen Sie diese in Ihrer CSS-Datei, um Farben, Schriftarten und Formen zu ändern, ohne komplexe Selektoren zu schreiben.
/* your-custom-styles.css */
:root {
--auth-bg: #1a1a2e;
--auth-card-bg: #16213e;
--auth-heading: #e0e0e0;
--auth-radius: 12px;
--auth-font: 'Inter', sans-serif;
}
VariableBeschreibungStandard
--auth-bgSeiten-Hintergrundfarbe#f3f4f6
--auth-card-bgHintergrund der Login-Kartewhite
--auth-headingFarbe des Überschriftentexts#111827
--auth-radiusEckenradius der Karte0.5rem
--auth-fontSchriftfamilieinherit

Dunkler Modus

Die Login-App bietet helle, dunkle und System-Designs. Benutzer wählen über einen Umschalter auf der Login-Seite; die Auswahl bleibt über Sitzungen hinweg erhalten. Bei system folgt die SPA dem Systemwert prefers-color-scheme in Echtzeit.

Helle Werte werden in :root deklariert; dunkle Überschreibungen sind auf .dark beschränkt. Tenant-Branding über customCssUrl hat immer Vorrang — Ihre Farben bleiben unabhängig vom gewählten Design erhalten.

Element-Selektoren

Für feinere Kontrolle können Sie bestimmte Elemente über data-auth-Attribute ansprechen. Diese Selektoren sind über Updates hinweg stabil — sie brechen nicht, wenn wir interne Klassennamen ändern.
SelektorElement
[data-auth="page"]Hintergrund-Container der gesamten Seite
[data-auth="header"]Bereich für Logo und App-Name
[data-auth="logo"]Logo-Bild
[data-auth="app-name"]App-Name-Überschrift (wenn kein Logo gesetzt ist)
[data-auth="content"]Hauptinhaltsbereich (Formulare, Meldungen)
[data-auth="login-form"]Login-Formular-Element
[data-auth="email-field"]E-Mail-Eingabe-Wrapper
[data-auth="password-field"]Passwort-Eingabe-Wrapper
[data-auth="submit-button"]Anmelde-Schaltfläche
[data-auth="languages"]Sprachauswahl-Leiste

Einstellungen

Konfigurieren Sie mandantenweite Sicherheitsrichtlinien, Webhooks und Umgebungseinstellungen. Diese Einstellungen gelten global für alle Clients, sofern sie nicht auf Client-Ebene überschrieben werden.

Passwortrichtlinie

Definieren Sie die Passwortkomplexitätsanforderungen für alle Benutzer in Ihrem Mandanten:

EinstellungBereichStandard
minPasswordLength6 – 1288
requireUppercaseAn / AusAn
requireLowercaseAn / AusAn
requireDigitAn / AusAn
requireSpecialCharAn / AusAn
Password policy settings showing minimum length slider and toggle switches for character requirements

Konfiguration der Passwortrichtlinie

MFA-Richtlinie

Die mandantenweite MFA-Richtlinie legt das Standard-Verhalten für Multi-Faktor-Authentifizierung fest. Einzelne Clients können diese Einstellung überschreiben.

RichtlinieVerhalten
DisabledMFA ist nicht verfügbar. Benutzer können sich nicht für MFA registrieren.
EnabledMFA ist optional. Benutzer können sich für MFA registrieren und werden bei der Anmeldung aufgefordert, wenn registriert.
RequiredMFA ist verpflichtend. Alle Benutzer müssen sich für MFA registrieren und bei jeder Anmeldung einen zweiten Faktor abschließen.

Sitzung & Sperrung

Steuern Sie die Sitzungsdauer und das Kontosperrungsverhalten:

EinstellungBereichStandard
sessionLifetimeMinutes5 – 43.200 (30 Tage)60
maxFailedAttempts1 – 1005
lockoutDurationMinutes1 – 1.440 (24 Stunden)10
Session and lockout settings with numeric inputs for session lifetime, max failed attempts, and lockout duration

Sitzungs- und Sperrungskonfiguration

Webhooks

Webhooks ermöglichen die Echtzeit-Reaktion auf Authentifizierungsereignisse. Zwei Ereignisse (onUserAuthenticated, onTokenIssued) sind erzwingbar — standardmäßig laufen sie asynchron und blockieren den Benutzer nicht, aber Sie können pro Ereignis Erzwingung aktivieren, sodass eine Antwort, die nicht 2xx ist, oder ein {"allow": false}-Body die Aktion ablehnt. Die übrigen Ereignisse sind Benachrichtigungen — immer „fire-and-forget", blockieren nie.

EreignisTypBeschreibung
onUserAuthenticatedErzwingbarWird nach einer erfolgreichen Anmeldung aufgerufen. Standardmäßig „fire-and-forget", sodass die Anmeldelatenz unbeeinflusst bleibt. Aktivieren Sie <code>webhookEnforceUserAuthenticated</code>, um den Aufruf blockierend zu machen — eine Antwort, die nicht 2xx ist, oder ein <code>{"allow": false}</code>-Body lehnt dann die Anmeldung ab.
onTokenIssuedErzwingbarWird vor der Token-Ausstellung aufgerufen (authorization_code, refresh_token, client_credentials). Standardmäßig „fire-and-forget". Aktivieren Sie <code>webhookEnforceTokenIssued</code>, um den Aufruf blockierend zu machen — eine Antwort, die nicht 2xx ist, oder ein <code>{"allow": false}</code>-Body verhindert dann die Token-Ausstellung.
onUserCreatedBenachrichtigungFire-and-Forget-Benachrichtigung, wenn ein neuer Benutzer sich registriert oder über SCIM bereitgestellt wird.
onUserUpdatedBenachrichtigung„Fire-and-forget"-Benachrichtigung, wenn ein Benutzerdatensatz aktualisiert wird (Profiländerungen, Rollenänderungen, SCIM-Updates).
onUserDeletedBenachrichtigung„Fire-and-forget"-Benachrichtigung, wenn ein Benutzer gelöscht wird, entweder per Portal/SCIM oder durch die Aufbewahrungsrichtlinie.
onLoginFailedBenachrichtigungFire-and-Forget-Benachrichtigung, wenn ein Anmeldeversuch aufgrund falscher Anmeldedaten, Sperrung oder Richtlinienablehnung fehlschlägt.

Zusätzliche Webhook-Einstellungen:

EinstellungBereichStandardBeschreibung
webhookTimeoutSeconds1 – 305Maximale Wartezeit auf eine Antwort eines Durchsetzungs-Webhooks vor dem Timeout
webhookFailOpenAn / AusAnWenn aktiviert und ein Durchsetzungs-Webhook nicht erreichbar ist oder ein Timeout hat, wird der Vorgang fortgesetzt
Webhook configuration section showing URL inputs for each event type, timeout slider, and fail-open toggle

Webhook-Ereigniskonfiguration

Verfügbarkeit von Durchsetzungs-Webhooks

Durchsetzungs-Webhooks können Authentifizierungsabläufe blockieren. Wenn Ihr Webhook-Endpunkt ausfällt und webhookFailOpen deaktiviert ist, kann sich kein Benutzer anmelden. Verwenden Sie den Fail-Open-Modus, es sei denn, Sie haben strenge Compliance-Anforderungen, die ein Blockieren bei Webhook-Ausfall vorschreiben.

Webhooks verifizieren

Sobald eine Webhook-URL konfiguriert ist, erzeugt Authagonal ein mandantenspezifisches Signaturgeheimnis (einen whsec_…-Wert, der unter Einstellungen → Webhooks schreibgeschützt angezeigt wird). Jede ausgehende Zustellung trägt einen X-Authagonal-Signature: t=<unix>,v1=<hex>-Header, wobei v1 gleich HMAC-SHA256(secret, "{t}.{body}") ist, berechnet über den rohen Anfrage-Body. Berechnen Sie ihn an Ihrem Endpunkt neu und vergleichen Sie ihn in konstanter Zeit, um zu bestätigen, dass die Anfrage tatsächlich von Authagonal stammt und nicht manipuliert wurde — und weisen Sie Zustellungen zurück, deren t zu alt ist, um Replays zu blockieren.

Einen Webhook verifizieren (Node.js)
import crypto from 'node:crypto';

// rawBody MUST be the exact bytes Authagonal sent — verify before any JSON re-serialization.
function verifyAuthagonalWebhook(signatureHeader, rawBody, signingSecret) {
  const parts = Object.fromEntries(signatureHeader.split(',').map((p) => p.split('=')));
  const { t, v1 } = parts;

  // Replay protection: reject deliveries older than 5 minutes.
  if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;

  const expected = crypto
    .createHmac('sha256', signingSecret)
    .update(`${t}.${rawBody}`)
    .digest('hex');

  return v1.length === expected.length &&
    crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}

Das Signaturgeheimnis rotieren

Verwenden Sie Neu generieren neben dem Signaturgeheimnis, um es zu rotieren — zum Beispiel nach einem vermuteten Leck. Das vorherige Geheimnis wird sofort ungültig, aktualisieren Sie daher Ihren Verifizierer mit dem neuen Wert, da sonst laufende Zustellungen ihre Signaturprüfung nicht mehr bestehen.

Wartungsfenster

Legen Sie ein bevorzugtes Wartungsfenster für störende Operationen wie Zertifikatsrotationen und Infrastrukturaktualisierungen fest. Wählen Sie eine UTC-Stunde (0-23) -- das Portal zeigt zur Vereinfachung auch die entsprechende Zeit in Ihrer lokalen Zeitzone an.

Sandbox-Umgebung

Die Sandbox-Umgebung ist ein vollständiger Klon Ihres Produktionsmandanten, verfügbar unter einer separaten URL. Verwenden Sie sie, um Konfigurationsänderungen, SSO-Integrationen und Webhook-Endpunkte zu testen, ohne Live-Benutzer zu beeinträchtigen.

AktionBeschreibung
Sandbox aktivierenErstellt eine Sandbox-Kopie Ihres Produktionsmandanten. Die Sandbox-URL ist Ihr Mandanten-Slug mit dem Suffix -sandbox.
Von Live aktualisierenSynchronisiert die Sandbox-Umgebung mit der aktuellen Produktionskonfiguration und den Benutzerdaten.
Sandbox deaktivierenLöscht die Sandbox-Umgebung und alle zugehörigen Daten dauerhaft.

Die Sandbox ist erreichbar unter {slug}-sandbox.authagonal.io.

Sandbox settings showing enable/disable toggle, refresh from live button, and sandbox URL display

Sandbox-Umgebungssteuerungen

Abrechnung

Verwalten Sie Ihr Abonnement und Ihre Abrechnung über die Abrechnungsseite des Portals. Diese Seite gibt Ihnen einen Überblick über Ihren aktüllen Tarif und bietet Zugang zum Stripe-Abrechnungsportal für die Verwaltung von Zahlungsmethoden, Rechnungen und Tarifänderungen.

Abonnementinformationen

Die Abrechnungsseite zeigt Ihre aktüllen Abonnementdetails auf einen Blick. Sie sehen ein Statusbadge, das Ihren Abonnementstatus anzeigt -- active, trialing, past_due, canceled oder unpaid -- zusammen mit Ihrem Tarifnamen, dem aktüllen Abrechnungszeitraum (Start- und Enddatum) und ob Ihr Abonnement zum Ende des aktüllen Zeitraums gekündigt wird.

Abonnement verwalten

Klicken Sie auf die Schaltfläche Abonnement verwalten, um das Stripe-Abrechnungsportal in einem neuen Fenster zu oeffnen. Dort können Sie Ihre Zahlungsmethoden aktualisieren, Rechnungen einsehen und herunterladen, Ihren Tarif ändern oder Ihr Abonnement kündigen.

Wenn noch kein Abonnement besteht, wird stattdessen eine Abrechnung einrichten-Handlungsaufforderung angezeigt, die Sie durch die Tarifauswahl und Eingabe der Zahlungsdaten führt.

Billing page showing subscription status, plan name, billing period, and Manage Subscription button

Die Abrechnungsseite zeigt Ihre aktüllen Abonnementdetails und bietet Zugang zu Stripe

Zahlungssicherheit

Die gesamte Abrechnung wird über Stripe abgewickelt. Ihre Zahlungsinformationen werden niemals auf Authagonal-Servern gespeichert.

Eigene Domains

Stellen Sie Ihre Authentifizierungsseiten über Ihre eigene Domain bereit (z. B. auth.ihredomain.com) anstelle der Standard-Domain {slug}.authagonal.io. Eigene Domains bieten Ihren Benutzern ein nahtloses, markenkonsistentes Authentifizierungserlebnis.

Domain hinzufügen

Geben Sie den Hostnamen ein, den Sie verwenden möchten (z. B. auth.ihredomain.com). Nach dem Hinzufügen erscheint die Domain in Ihrer Domainliste mit dem Status pending_verification.

DNS-Verifizierung

Erstellen Sie einen CNAME-Eintrag, der Ihre Domain auf {slug}.authagonal.io verweist. Sobald der DNS-Eintrag vorhanden ist, klicken Sie auf Verifizieren, um die DNS-Propagierung zu prüfen.

CNAME record
auth.yourdomain.com.  CNAME  acme.authagonal.io.

DNS-Propagierung

Die DNS-Propagierung kann bis zu 48 Stunden dauern. Wenn die Verifizierung fehlschlägt, warten Sie und versuchen Sie es erneut.

TLS-Zertifikate

Sobald Ihre Domain verifiziert ist, benötigen Sie ein TLS-Zertifikat, damit Benutzer sicher über HTTPS verbinden können. Authagonal unterstützt zwei Optionen:

Automatisch (cert-manager) -- Authagonal stellt TLS-Zertifikate automatisch über cert-manager bereit und erneuert sie. Dies ist die empfohlene Option für die meisten Benutzer. Keine zusätzliche Konfiguration erforderlich.

Eigenes Zertifikat (BYO) -- Laden Sie Ihr eigenes Zertifikat und Ihren privaten Schlüssel im PEM-Format hoch. Diese Option ist nützlich, wenn Ihre Organisation Zertifikate von einer bestimmten Zertifizierungsstelle verlangt. Der Zertifikatsablauf wird verfolgt, damit Sie vor dem Ablauf erneuern können.

Domain-Status

Jede Domain zeigt ein Statusbadge an, das ihren aktüllen Zustand angibt: pending_verification (DNS noch nicht bestätigt), verified (DNS bestätigt, TLS ausstehend), active (voll funktionsfähig) oder failed (Konfigurationsproblem erkannt).

Domain list showing domains with status badges and verification controls

Die Domainliste zeigt jede eigene Domain und ihren aktüllen Status

BYO certificate upload form with certificate and private key PEM fields

Laden Sie Ihr eigenes TLS-Zertifikat und Ihren privaten Schlüssel im PEM-Format hoch

BYO-Zertifikatserneuerung

Halten Sie Ihr BYO-Zertifikat aktüll. Abgelaufene Zertifikate verursachen Browser-Sicherheitswarnungen für Ihre Benutzer.

E-Mail-Konfiguration

Konfigurieren Sie, wie Ihr Tenant Transaktions-E-Mails sendet — Verifizierung, Passwort-Reset und MFA-Benachrichtigungen. Wählen Sie zwischen dem Standard-Shared-Sender, einer verifizierten eigenen Domain über Resend oder Ihrem eigenen SMTP-Server.

E-Mail-Anbieter

AnbieterBeschreibungEinrichtung
DefaultE-Mails werden von noreply@authagonal.io über unsere gemeinsame Resend-Infrastruktur gesendet.Keine Konfiguration erforderlich — funktioniert sofort.
Resend Custom DomainE-Mails werden von Ihrer eigenen verifizierten Domain über Resend gesendet.Domain registrieren, DNS-Einträge hinzufügen, Eigentümerschaft verifizieren.
Custom SMTPE-Mails werden über Ihren eigenen SMTP-Server gesendet.SMTP-Host, -Port, Zugangsdaten und TLS-Einstellungen angeben.

Absenderidentität

Absender-E-Mail und -Name werden über alle Anbieter-Modi hinweg geteilt. Die Absender-E-Mail ist erforderlich; der Absendername fällt auf den Tenant-Namen zurück, wenn leer.

FeldBeschreibung
senderEmailDie From-Adresse für ausgehende E-Mails. Muss bei Resend Custom Domain eine verifizierte Domain sein.
senderNameAnzeigename, der im Posteingang des Empfängers angezeigt wird.

Resend Custom Domain

Verifizieren Sie Ihre Versanddomäne einmalig bei Resend und verwenden Sie sie dann als Absenderadresse für diesen Tenant. Die DNS-TXT-Einträge (SPF, DKIM) werden auf der Domains-Seite bereitgestellt; Resend validiert sie automatisch.

Eigenes SMTP

Bringen Sie Ihren eigenen SMTP-Server mit — nützlich für interne Relays, Anbieter ohne Resend-Abdeckung oder regulatorische Bindung.

FeldBeschreibung
hostSMTP-Server-Hostname (z. B. smtp.example.com).
portVerbindungsport. 587 für STARTTLS, 465 für implizites TLS, 25 für nicht authentifizierte interne Relays.
usernameAuth-Benutzername (optional — leer lassen für nicht authentifizierte Relays).
passwordAuth-Passwort. Verschlüsselt im Tenant-Settings-Secret gespeichert.
useTlsTLS erforderlich. Lassen Sie es aktiviert, es sei denn, Sie zielen auf ein vertrauenswürdiges internes Relay ab.

Eigene Versanddomäne

Mit dem Resend-Anbieter können Sie Ihre eigene Domain registrieren, damit E-Mails von Ihrer Marke (z. B. noreply@acme.com) statt @authagonal.io gesendet werden.

  1. Gehen Sie zu Einstellungen → E-Mail und wählen Sie den Anbieter Resend Custom Domain.
  2. Geben Sie Ihren Domainnamen ein und klicken Sie auf Registrieren.
  3. Fügen Sie die angezeigten DNS-Einträge (DKIM, SPF und Return-Path) zu Ihrem Domain-DNS hinzu.
  4. Klicken Sie auf Verifizierung prüfen — sobald das DNS propagiert ist (meist 1–10 Minuten), wechselt der Domain-Status auf verifiziert.

DNS-Propagation

DNS-Änderungen können bis zu 48 Stunden brauchen, um sich global zu verbreiten, die meisten Anbieter aktualisieren jedoch innerhalb von Minuten. Sie können die Verifizierung beliebig oft prüfen.

Testen

Verwenden Sie die Schaltfläche Test-E-Mail senden unter Einstellungen → E-Mail, um Ihre Konfiguration zu überprüfen. Eine Test-E-Mail wird mit den aktuell gespeicherten Einstellungen an Ihre Admin-E-Mail-Adresse gesendet.

Audit-Protokoll

Das Audit-Protokoll bietet eine schreibgeschützte Aufzeichnung aller administrativen Aktionen, die auf Ihrem Mandanten durchgeführt wurden. Jede über das Portal oder die API vorgenommene Änderung wird mit vollständigem Kontext erfasst und bietet einen lückenlosen Nachweis für Compliance und Fehlerbehebung.

Protokollspalten

SpalteBeschreibung
ZeitstempelDatum und Uhrzeit, zu der die Aktion ausgeführt wurde
AkteurDie E-Mail-Adresse des Administrators, der die Aktion ausgeführt hat, oder "system" für automatisierte Aktionen
AktionDie Art der ausgeführten Aktion (z. B. Client erstellt, Einstellungen aktualisiert)
EntitätDas Ziel der Aktion im Format typ:id (z. B. client:my-app)
DetailZusätzlicher Kontext zur Änderung

Erfasste Aktionen

Die folgenden administrativen Aktionen werden im Audit-Protokoll erfasst:

KategorieAktionen
ClientsClient erstellt, Client aktualisiert, Client gelöscht
SSO-VerbindungenSAML-Verbindung erstellt, SAML-Verbindung gelöscht, OIDC-Verbindung erstellt, OIDC-Verbindung gelöscht
BenutzerBenutzer erstellt, Benutzer aktualisiert
EinstellungenEinstellungen aktualisiert, Branding aktualisiert
DomainsDomain hinzugefügt, Domain verifiziert, Domain gelöscht
SCIMSCIM-Token erstellt, SCIM-Token widerrufen
RollenRolle erstellt, Rolle aktualisiert, Rolle gelöscht
GruppenGruppe erstellt, Gruppe gelöscht
TeamTeammitglied eingeladen, Teammitglied entfernt
Audit log table showing timestamped administrative actions with actor, action, entity, and detail columns

Das Audit-Protokoll bietet eine vollständige Aufzeichnung aller administrativen Aktionen

Aufbewahrung

Audit-Protokolle werden für die gesamte Lebensdauer Ihres Mandanten aufbewahrt und können weder geaendert noch gelöscht werden.

Backups

Authagonal sichert Ihre Tenant-Daten automatisch stündlich. Backups umfassen alle Benutzer, Gruppen, Rollen, Clients, SSO-Verbindungen, SCIM-Tokens, Branding und Einstellungen. Sie können die Backup-Historie einsehen und das neueste vollständige Backup auf der Backups-Seite herunterladen.

Backups page showing backup history with timestamps, types, and entity counts

So funktionieren Backups

  • Ein vollständiges Backup läuft einmal täglich und erfasst jede Tabelle im Storage-Shard Ihres Tenants.
  • Inkrementelle Backups laufen stündlich und erfassen nur die Zeilen, die sich seit dem letzten Backup geändert haben.
  • Backups werden in Azure Blob Storage mit der gleichen Managed Identity gespeichert, die Ihr Tenant verwendet.
  • Gelöschte Datensätze werden über Tombstones verfolgt und aus Auditgründen in Backups eingeschlossen.

Backups herunterladen

Klicken Sie auf „Neueste herunterladen", um eine ZIP-Datei mit dem neuesten Voll-Backup zusammengeführt mit allen nachfolgenden inkrementellen Backups zu erhalten. Jede Tabelle wird als JSONL-Datei exportiert (ein JSON-Objekt pro Zeile).

Backup-Format

Backups werden als JSONL (JSON Lines) exportiert — eine Entität pro Zeile pro Tabelle. Dieses Format ist einfach zu parsen, zu diffen und in andere Systeme zu importieren.

Bereitstellungs-Apps

Bereitstellungs-Apps erhalten Echtzeit-Webhook-Benachrichtigungen, wenn Benutzer in Ihrem Mandanten erstellt oder authentifiziert werden. Dies ermöglicht es nachgelagerten Systemen, automatisch Konten einzurichten, Lizenzen zuzuweisen oder Benutzerdaten zu synchronisieren, ohne manülles Eingreifen.

Funktionsweise

Wenn ein Benutzerereignis eintritt (Erstellung oder Authentifizierung), ruft Authagonal die Callback-URL Ihrer Bereitstellungs-App unter Verwendung des TCC (Try/Confirm/Cancel)-Musters auf. Dieser dreiphasige Ansatz gewährleistet zuverlässige Bereitstellung über mehrere nachgelagerte Systeme:

PhaseEndpunktZweck
/tryPOST {callbackUrl}/tryPrüft, ob die App den Benutzer verarbeiten kann. 200 zurückgeben, um zu akzeptieren, oder 4xx, um abzulehnen.
/confirmPOST {callbackUrl}/confirmBestätigt den Vorgang, nachdem alle Apps die /try-Phase akzeptiert haben.
/cancelPOST {callbackUrl}/cancelMacht den Vorgang rückgängig, wenn eine andere App während der /try-Phase fehlschlägt.

Webhook-Payload

Jede Webhook-Anfrage enthält ein JSON-Payload mit den folgenden Feldern:

FeldTypBeschreibung
eventstringDer Ereignistyp (z. B. user.created, user.authenticated)
userIdstringDer eindeutige Bezeichner des Benutzers
emailstringDie E-Mail-Adresse des Benutzers
namestringDer Anzeigename des Benutzers
tenantIdstringIhr Mandantenbezeichner
timestampstringISO 8601-Zeitstempel des Ereignisses

Bereitstellungs-App hinzufügen

Um eine Bereitstellungs-App hinzuzufügen, geben Sie einen Namen, eine Callback-URL und einen optionalen API-Schlüssel an. Der API-Schlüssel wird als Bearer-Token im Authorization-Header jeder Webhook-Anfrage gesendet, sodass Ihre App Anfragen von Authagonal authentifizieren kann.

Testen

Klicken Sie auf Testen neben einer Bereitstellungs-App, um eine Testanfrage an Ihre Callback-URL zu senden. Die Testergebnisse zeigen den HTTP-Statuscode und den Antworttext, damit Sie überprüfen können, ob Ihre App Webhooks korrekt empfängt und verarbeitet.

Provisioning apps page showing configured apps with test results displaying HTTP status and response body

Bereitstellungs-Apps testen, um Webhook-Zustellung und Antwortverarbeitung zu überprüfen

Tarif-Limits

Die maximale Anzahl an Bereitstellungs-Apps ist pro Mandant konfigurierbar, mit einem Standardlimit von 6. Dieses Limit kann von einem Administrator angepasst werden, wenn Ihr Workflow zusätzliche Bereitstellungsziele erfordert.

API-Schlüssel-Authentifizierung

Wenn ein API-Schlüssel gesetzt ist, wird er als Bearer-Token im Authorization-Header gesendet. Verwenden Sie dies, um Webhook-Anfragen von Authagonal zu authentifizieren.

Team

Die Teamseite verwaltet Portal-Administratoren -- die Personen, die auf Ihren Mandanten über das Verwaltungsportal zugreifen und ihn konfigurieren können. Alle Teammitglieder haben vollständigen administrativen Zugriff auf jeden Aspekt Ihrer Mandantenkonfiguration.

Administratorenliste

Die Administratorenliste zeigt den Namen, die E-Mail-Adresse und das Hinzufügedatum jedes Teammitglieds. Ein "Sie"-Indikator wird neben der Zeile des aktüllen Benutzers angezeigt, damit Sie Ihr eigenes Konto leicht identifizieren können.

Administratoren einladen

Um ein neues Teammitglied einzuladen, geben Sie dessen E-Mail-Adresse, Namen und ein temporäres Passwort (mindestens 8 Zeichen) an. Der eingeladene Benutzer meldet sich mit dem temporären Passwort an und sollte es bei der ersten Anmeldung ändern.

Einladungsfelder

Admin-Einladungen erstellen einen vollständig bereitgestellten Benutzer — kein E-Mail-Roundtrip erforderlich.

FeldBeschreibung
emailE-Mail-Adresse des neuen Admins. Muss im Mandanten eindeutig sein.
nameAnzeigename in der Adminliste.
tempPasswordTemporäres Passwort, das der Eingeladene bei der ersten Anmeldung verwendet. Er wird zum Ändern aufgefordert. Leer lassen, um automatisch zu generieren und per E-Mail zu senden.

Administratoren entfernen

Klicken Sie auf Entfernen neben einem Teammitglied, um dessen Zugriff zu widerrufen. Ein Bestätigungsdialog wird angezeigt, bevor die Entfernung abgeschlossen wird. Sie können sich nicht selbst entfernen -- es muss immer mindestens ein Administrator im Team vorhanden sein.

Team page showing the admin list with name, email, date added columns, a You indicator, and invite/remove controls

Portal-Administratoren über die Teamseite verwalten

Keine Eigentümer-Rolle

Es gibt keine Unterscheidung einer "Eigentümer"-Rolle. Alle Portal-Administratoren haben vollständigen Zugriff auf die Mandantenkonfiguration. Seien Sie vorsichtig, wen Sie einladen.

Importieren & migrieren

Migrieren Sie ein bestehendes Identitätssystem in Ihren Authagonal-Mandanten. Zwei Quellen werden unterstützt — Duende IdentityServer (eine SQL-Server-Datenbank) und Auth0 (die Management API). Jede führt eine schreibgeschützte Vorschau aus, damit Sie genau prüfen können, was kopiert wird, bevor Sie etwas übernehmen.

Import aus Duende IdentityServer

Migrieren Sie Clients, Scopes, Benutzer und Rollen aus einer bestehenden Duende-IdentityServer-SQL-Server-Datenbank in Ihren Authagonal-Mandanten. Der Import läuft in zwei Phasen — Vorschau und Commit — damit Sie prüfen können, was kopiert wird, bevor etwas geschrieben wird.

Was importiert wird

Der Importer liest aus Duendes ConfigurationDb und den ASP.NET-Identity-Tabellen und schreibt die zugeordneten Zeilen in Ihren Mandanten. Kurzlebige Artefakte wie Persisted Grants, Device Codes und Signaturschlüssel werden übersprungen.

EntitätQuelltabellenHinweise
ClientsClients, ClientSecrets, ClientGrantTypes, ClientScopes, ClientRedirectUrisDeaktivierte Clients werden deaktiviert importiert. Abgelaufene Secrets werden übersprungen.
ScopesApiScopes, ApiResources, IdentityResourcesBenutzer-Claim-Zuordnungen werden übernommen, soweit erkannt.
BenutzerAspNetUsers, AspNetUserClaimsPasswort-Hashes (ASP.NET Identity V3) werden unverändert kopiert und beim ersten Login neu gehasht.
RollenAspNetRoles, AspNetUserRolesRollenzuweisungen bleiben erhalten.
Externe AnmeldungenAspNetUserLoginsZur Referenz gespeichert; externe IdPs nach dem Import über SSO neu verbinden.

Vorschau vor Commit

Fügen Sie Ihren Verbindungs-String zur ConfigurationDb / IdentityDb ein und klicken Sie auf Vorschau ausführen. Die Vorschau öffnet eine Read-only-Verbindung und zählt jede Zeile, die importiert würde — ohne etwas zu schreiben.

  • Anzahl der Entitäten für Clients, Scopes, Benutzer, Rollen und Rollenzuweisungen.
  • Besitzerkonflikte — Mandanten-Admins, deren vorhandene <code>userId</code> sich vom eingehenden Duende-<code>sub</code> unterscheidet.
  • Warnungen für unbekannte Tabellen und nicht zugeordnete Spalten, damit klar ist, was verworfen wird.
Import preview panel showing entity counts, owner collisions, and warnings before committing the import

Vorschaupanel mit Zählern, Konflikten und Warnungen

Passwort-Hashes

Duende speichert Passwörter im ASP.NET-Identity-V3-Format (PBKDF2). Authagonals PasswordHasher verifiziert dieses Format direkt und rehasht bei der ersten erfolgreichen Anmeldung in das native Format — Benutzer behalten ihre bestehenden Passwörter ohne Reset-Flow.

Rotation der Owner-UserId

Wenn die E-Mail eines Mandanten-Admins in der Duende-Datenbank existiert, wird die Authagonal-userId des Admins an den Duende-sub angepasst. So bleiben Tokens und Audit-Einträge nach dem Cutover konsistent. Die Vorschau listet alle Konflikte auf, bevor Sie committen.

Sie werden möglicherweise abgemeldet

Wenn Ihr eigenes Konto betroffen ist, meldet das Portal Sie direkt nach dem Import ab, damit Ihre nächste Sitzung die neue userId trägt. Melden Sie sich mit denselben Zugangsdaten wieder an.

Import ausführen

Klicken Sie nach Prüfung der Vorschau auf Import starten. In der Commit-Phase werden Clients, Scopes, Benutzer, Rollen und externe Anmelde-Referenzen in Ihre Mandanten-Stores geschrieben. Doppelte clientId-, scope name-, email- und role name-Einträge werden übersprungen — der Importer ist mehrfach ausführbar.

Was nicht importiert wird

  • Persisted Grants, Device Codes, Server-Side Sessions — kurzlebig, werden automatisch neu erzeugt.
  • Signaturschlüssel — Authagonal gibt pro Mandant eigene Schlüssel aus.
  • Eigene Spalten und Tabellen — alles außerhalb des Duende-Standardschemas wird als Warnung ausgegeben, damit klar ist, dass diese Daten verworfen werden.
  • Deaktivierte Clients — werden deaktiviert importiert; bei Bedarf über die Seite Clients wieder aktivieren.

Nicht im Sandbox-Modus verfügbar

Der Import läuft nur gegen den Live-Mandanten. Verlassen Sie den Sandbox-Modus vor dem Import.

Import aus Auth0

Verbinden Sie Authagonal mit der Management API Ihres Auth0-Mandanten und übernehmen Sie Ihre Anwendungen, APIs, Rollen, Benutzer und Enterprise-Verbindungen. Importierte Benutzer- und Anwendungs-IDs bleiben erhalten, sodass bestehende sub- und client_id-Referenzen nach dem Umzug weiterhin aufgelöst werden.

Was Sie benötigen

Erstellen Sie in Auth0 eine Machine-to-Machine-Anwendung, die für die Management API autorisiert ist und über folgende Lese-Scopes verfügt: read:users, read:clients, read:resource_servers, read:roles, read:connections, read:client_grants. Tragen Sie deren Domain, Client-ID und Client-Secret in das Importformular ein — sie werden ausschließlich für den Import verwendet.

Was importiert wird

EntitätQuelltabellenHinweise
Anwendungenclients, client-grantsPublic vs. confidential wird automatisch erkannt. Client-Secrets werden neu gehasht, damit sie weiter funktionieren.
APIs & Scopesresource-serversAudiences und Scopes werden jedem Client aus seinen Grants zugewiesen.
Rollenroles + ZuweisungenPro-Benutzer-Rollenzuweisungen bleiben erhalten.
Benutzerusers + identitiesProfile und Metadaten werden übertragen; Social-/Enterprise-Identitäten werden zu verknüpften Logins.
Verbindungenconnections (OIDC)Enterprise-OIDC-Verbindungen werden zu föderierten Providern. SAML-, Social- und Datenbank-Verbindungen werden mit einer Warnung übersprungen.

Passwörter

Die Management API von Auth0 gibt niemals Passwort-Hashes zurück. Wenn Sie über Auth0s support-gestützten Bulk-Passwortexport (NDJSON) verfügen, stellen Sie diesen bereit — bcrypt-Hashes werden unverändert importiert und Ihre Benutzer behalten ihre Passwörter ohne Reset. Diese Datei enthält außerdem Ihren vollständigen Benutzerbestand und hebt damit Auth0s Listenlimit von 1.000 Benutzern in der API auf. Ohne sie werden Benutzer als Profile importiert und legen beim ersten Login ein neues Passwort fest.

Gleiche Vorschau, Rotation und Limits

Die oben beschriebene Vorschau, die Rotation der owner-userId, der wiederholbare Commit und die Sandbox-Einschränkung gelten auch für Auth0-Importe.

API-Referenz

Jeder Mandant stellt einen standardkonformen OIDC-Server unter https://{slug}.authagonal.io bereit. Alle Endpunkte folgen den OAuth 2.0- und OpenID Connect-Spezifikationen. Diese Referenz deckt jeden Endpunkt ab, mit dem Ihre Anwendung möglicherweise interagieren muss.

OIDC Authorization Code Flow with PKCE — sequence diagram showing the 9-step flow between your app, the browser, and Authagonal

Authorization Code Flow mit PKCE

OIDC Discovery & JWKS

Das Discovery-Dokument ermöglicht es OIDC-Client-Bibliotheken, sich automatisch zu konfigurieren. Für keinen der beiden Endpunkte ist eine Authentifizierung erforderlich.

GET /.well-known/openid-configuration

Gibt das OpenID Provider Configuration-Dokument zurück. Die Antwort enthält alle Metadaten, die Ihr Client für die Interaktion mit diesem Mandanten benötigt.

FeldBeschreibung
issuerDie Issuer-URL des Mandanten
authorization_endpointURL für Autorisierungsanfragen
token_endpointURL für den Token-Austausch
userinfo_endpointURL zum Abrufen von Benutzer-Claims
jwks_uriURL für das JSON Web Key Set
revocation_endpointURL für Token-Widerruf
introspection_endpointURL für Token-Introspection
end_session_endpointURL für Logout / Sitzungsbeendigung
device_authorization_endpointURL für Geräteautorisierungsanfragen
pushed_authorization_request_endpointURL des Pushed Authorization Request-Endpunkts (RFC 9126).
require_pushed_authorization_requestsOb der Mandant PAR global vorschreibt. Auch wenn dies <code>false</code> ist, können einzelne Clients <code>RequirePushedAuthorizationRequests = true</code> setzen.
scopes_supportedListe der unterstützten Scopes
response_types_supportedUnterstützte Antworttypen
grant_types_supportedUnterstützte Grant-Typen
code_challenge_methods_supportedUnterstützte PKCE-Methoden (S256)
backchannel_logout_supportedOb Back-Channel-Logout unterstützt wird

GET /.well-known/openid-configuration/jwks

Gibt das JSON Web Key Set zurück, das zur Überprüfung von Token-Signaturen verwendet wird. Die Antwort enthält ein keys-Array mit öffentlichen RSA-Schlüsseln, die jeweils kty, use, kid, alg, n und e-Felder enthalten.

Fetch discovery document
curl https://acme.authagonal.io/.well-known/openid-configuration

Autorisierungsendpunkt

GET /connect/authorize

Leitet einen Authorization-Code-Flow ein. Der Benutzer muss eine aktive Sitzung haben, andernfalls wird er zur Anmeldeseite weitergeleitet. Bei Erfolg wird der Benutzer mit einem Authorization Code zu Ihrer Anwendung zurückgeleitet.

ParameterErforderlichBeschreibung
response_typeJaMuss "code" sein
client_idJaIhr registrierter Client-Bezeichner
redirect_uriJaMuss exakt mit einer registrierten Redirect-URI übereinstimmen
scopeJaLeerzeichen-getrennte Liste von Scopes (z. B. "openid profile email")
stateEmpfohlenOpaker Wert für CSRF-Schutz, wird unverändert in der Weiterleitung zurückgegeben
code_challengeErforderlich bei PKCEBase64url-kodierter SHA-256-Hash des code_verifier
code_challenge_methodErforderlich bei PKCEMuss "S256" sein
nonceOptionalWert, der an das ID-Token gebunden wird, zum Schutz vor Replay-Angriffen
login_hintOptionalDas E-Mail-Feld auf der Anmeldeseite vorausfüllen

Erfolgsantwort: 302-Weiterleitung zu redirect_uri mit code- und state-Query-Parametern.

Fehlerantwort: 302-Weiterleitung mit error-, error_description- und state-Query-Parametern.

PKCE erforderlich

PKCE ist standardmäßig für alle Clients erforderlich. Generieren Sie einen code_verifier (eine zufällige Zeichenkette mit 43 oder mehr Zeichen), hashen Sie ihn mit SHA-256 und kodieren Sie das Ergebnis in Base64url, um den code_challenge zu erstellen.

Pushed Authorization Requests (PAR)

RFC 9126. Statt jeden Authorize-Parameter in die URL zu packen, sendet Ihr Client diese per POST an /connect/par mit normaler Client-Authentifizierung und erhält eine kurzlebige opake request_uri zurück. Der Browser ruft anschließend /connect/authorize?client_id=...&request_uri=... auf — sonst landet nichts in Browser-Historie, Server-Logs oder Referer-Headern, und der Server hat die Parameter unter Client-Authentifizierung bereits integritätsgeprüft.

POST /connect/par

Die Client-Authentifizierung ist identisch zu /connect/token: HTTP Basic mit client_id/client_secret oder formularkodierte Anmeldedaten. Public Clients senden ohne Secret. Der Body trägt dieselben Parameter, die Sie normalerweise an /connect/authorize schicken würden; request_uri selbst wird abgelehnt (das Verketten eines PAR ist laut §2.1 der Spezifikation verboten). Liefert 201 Created.

ParameterErforderlichBeschreibung
client_idJaIhre Client-ID. Muss mit dem authentifizierten Client übereinstimmen.
client_secretVertrauliche ClientsIhr Client-Secret. Erforderlich für vertrauliche Clients.
response_typeJaMuss "code" sein
redirect_uriJaMuss exakt mit einer registrierten Redirect-URI übereinstimmen
scopeJaLeerzeichen-getrennte Liste von Scopes (z. B. "openid profile email")
code_challengeErforderlich bei PKCEBase64url-kodierter SHA-256-Hash des code_verifier
code_challenge_methodErforderlich bei PKCEMuss "S256" sein
stateEmpfohlenOpaker Wert für CSRF-Schutz, wird unverändert in der Weiterleitung zurückgegeben
nonceOptionalWert, der an das ID-Token gebunden wird, zum Schutz vor Replay-Angriffen

Antwort

FeldBeschreibung
request_uriEinmalige opake Referenz, z. B. <code>urn:ietf:params:oauth:request_uri:abc123…</code>. Übergeben Sie sie als <code>request_uri</code> an <code>/connect/authorize</code>.
expires_inLebensdauer der <code>request_uri</code> in Sekunden. Standard ist 90 — typischer Wert von Referenz-IdPs.

Beim folgenden GET /connect/authorize?client_id=…&request_uri=… werden alle weiteren Parameter aus dem gepushten Payload gezogen; zusätzliche Query-Parameter werden ignoriert. Die client_id beim Authorize-Aufruf muss mit dem Client übereinstimmen, der den Request gepusht hat. Sobald sie konsumiert ist (oder expires_in abläuft), wird die request_uri aus dem Speicher entfernt.

PAR pro Client erzwingen

Aktivieren Sie PAR erforderlich bei einem Client (Portal → Clients → Client → Erweitert), um einfache /connect/authorize-Aufrufe von ihm abzulehnen. Die empfohlene Konfiguration für hochsensible Clients kombiniert RequirePushedAuthorizationRequests = true mit PKCE — das eliminiert die URL-Leiste vollständig als Angriffsfläche.
Push an authorization request and follow up
# 1. Push parameters (server returns request_uri + expires_in)
curl -X POST https://acme.authagonal.io/connect/par \
  -u "my-app:CLIENT_SECRET" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "response_type=code" \
  -d "redirect_uri=https://app.example.com/callback" \
  -d "scope=openid profile email" \
  -d "state=$(openssl rand -hex 16)" \
  -d "code_challenge=YOUR_CODE_CHALLENGE" \
  -d "code_challenge_method=S256"

# 2. Send the user to /authorize with only client_id + request_uri
# https://acme.authagonal.io/connect/authorize?client_id=my-app&request_uri=urn:ietf:params:oauth:request_uri:abc123...

Token-Endpunkt

POST /connect/token

Tauscht Anmeldedaten gegen Tokens aus. Anfragen müssen Content-Type: application/x-www-form-urlencoded verwenden. Die Client-Authentifizierung kann über HTTP Basic Auth (Authorization: Basic base64(client_id:client_secret)) oder als Formular-Body-Parameter (client_id + client_secret) bereitgestellt werden.

Authorization Code Grant

ParameterErforderlichBeschreibung
grant_typeJa"authorization_code"
codeJaDer Authorization Code aus der Weiterleitung
redirect_uriJaMuss mit der in der Autorisierungsanfrage verwendeten URI übereinstimmen
code_verifierErforderlich bei PKCEDie ursprüngliche Zufallszeichenkette, die zur Generierung des code_challenge verwendet wurde
client_idJaIhr Client-Bezeichner (wenn nicht Basic Auth verwendet wird)
client_secretVertrauliche ClientsIhr Client-Secret (wenn nicht Basic Auth verwendet wird)

Refresh Token Grant

ParameterErforderlichBeschreibung
grant_typeJa"refresh_token"
refresh_tokenJaDas auszutauschende Refresh-Token
client_idJaIhr Client-Bezeichner
client_secretVertrauliche ClientsIhr Client-Secret

Client Credentials Grant

ParameterErforderlichBeschreibung
grant_typeJa"client_credentials"
client_idJaIhr Client-Bezeichner
client_secretJaIhr Client-Secret
scopeOptionalLeerzeichen-getrennte Scopes zum Anfordern

Device Code Grant

ParameterErforderlichBeschreibung
grant_typeJa"urn:ietf:params:oauth:grant-type:device_code"
device_codeJaDer Device Code aus der Geräteautorisierungsantwort
client_idJaIhr Client-Bezeichner
client_secretVertrauliche ClientsIhr Client-Secret

Token-Antwort:

FeldBeschreibung
access_tokenDas Access-Token für API-Aufrufe
token_type"Bearer"
expires_inToken-Lebensdauer in Sekunden
id_tokenOpenID Connect ID-Token (wenn der openid-Scope angefordert wird)
refresh_tokenRefresh-Token (wenn der offline_access-Scope gewährt wird)
Exchange authorization code with PKCE
curl -X POST https://acme.authagonal.io/connect/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code" \
  -d "code=AUTHORIZATION_CODE" \
  -d "redirect_uri=https://app.example.com/callback" \
  -d "client_id=my-app" \
  -d "code_verifier=YOUR_CODE_VERIFIER"

UserInfo-Endpunkt

GET /connect/userinfo

Gibt Claims über den authentifizierten Benutzer zurück. Erfordert ein gültiges Access-Token mit dem openid-Scope.

FeldTypBeschreibung
substringEindeutiger Benutzerbezeichner
emailstringE-Mail-Adresse des Benutzers
email_verifiedbooleanOb die E-Mail verifiziert wurde
given_namestringVorname
family_namestringNachname
namestringVollständiger Anzeigename
phone_numberstringTelefonnummer (falls angegeben)
org_idstringOrganisationsbezeichner
rolesstring[]Array der zugewiesenen Rollen
groupsobject[]Array der Gruppenmitgliedschaften, jeweils mit id und name
Fetch user info
curl https://acme.authagonal.io/connect/userinfo \
  -H "Authorization: Bearer ACCESS_TOKEN"

Token Introspection (RFC 7662)

POST /connect/introspect

Validiert ein Token und gibt seine Metadaten zurück. Erfordert Client-Anmeldedaten (Basic Auth oder Formular-Body-Parameter).

ParameterErforderlichBeschreibung
tokenJaDas zu untersuchende Token
token_type_hintOptionalHinweis auf den Token-Typ (z. B. "refresh_token")

Antwort für aktives Token:

FeldBeschreibung
activetrue
subSubjekt (Benutzer-ID)
client_idClient, für den das Token ausgestellt wurde
scopeLeerzeichen-getrennte gewährte Scopes
issAussteller
expAblaufzeit (Unix-Zeitstempel)
iatAusstellungszeit (Unix-Zeitstempel)
audZielgruppe
token_typeToken-Typ (z. B. "Bearer")

Antwort für inaktives Token: { "active": false }

Immer 200 OK

Gemäß RFC 7662 gibt der Introspection-Endpunkt immer 200 OK zurück — niemals 401 oder 403. Dies verhindert Token-Enumeration-Angriffe. Ein ungültiges oder abgelaufenes Token gibt einfach active: false zurück.
Introspect a token
curl -X POST https://acme.authagonal.io/connect/introspect \
  -u "my-app:CLIENT_SECRET" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "token=ACCESS_OR_REFRESH_TOKEN"

Token-Widerruf (RFC 7009)

POST /connect/revocation

Widerruft ein zuvor ausgestelltes Token. Erfordert Client-Anmeldedaten.

ParameterErforderlichBeschreibung
tokenJaDas zu widerrufende Token
token_type_hintOptionalHinweis auf den Token-Typ (z. B. "refresh_token")

Der Endpunkt gibt gemäß der RFC 7009-Spezifikation immer 200 OK zurück, auch für ungültige oder bereits widerrufene Tokens.

Nur Refresh-Tokens

Unterstützt derzeit den Widerruf von Refresh-Tokens. Access-Tokens sind zustandslose JWTs und können nicht widerrufen werden — sie bleiben gültig, bis sie natürlich ablaufen.

Geräteautorisierung (RFC 8628)

POST /connect/deviceauthorization

Leitet den Geräteautorisierungsflow für eingabebeschränkte Geräte ein (CLIs, Smart-TVs, IoT-Geräte). Das Gerät zeigt dem Benutzer einen Code an, der die Anfrage dann auf einem separaten Gerät mit Browser genehmigt.

ParameterErforderlichBeschreibung
client_idJaIhr Client-Bezeichner
client_secretVertrauliche ClientsIhr Client-Secret
scopeOptionalLeerzeichen-getrennte Scopes (Standard: "openid")

Antwort:

FeldBeschreibung
device_codeGeräte-Verifizierungscode (für Polling verwendet)
user_codeBenutzercode im Format XXXX-XXXX
verification_uriURL, die der Benutzer besucht, um den Code einzugeben
verification_uri_completeURL mit vorausgefülltem user_code
expires_in600 (Sekunden — der Code ist 10 Minuten gültig)
interval5 (Sekunden — minimales Polling-Intervall)

Genehmigungsablauf: Der Benutzer besucht die verification_uri, gibt den user_code ein und genehmigt die Anfrage. Währenddessen pollt das Gerät den Token-Endpunkt mit dem device_code.

Polling-Fehlercodes:

FehlerBedeutung
authorization_pendingDer Benutzer hat noch nicht genehmigt — weiter pollen
expired_tokenDer Device Code ist abgelaufen — Flow neu starten
access_deniedDer Benutzer hat die Autorisierungsanfrage abgelehnt
Request device authorization
curl -X POST https://acme.authagonal.io/connect/deviceauthorization \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=my-cli" \
  -d "scope=openid profile email"

Sitzung beenden / Logout

GET POST /connect/endsession

Meldet die aktuelle Benutzersitzung ab, löst Back-Channel-Logout für alle Clients mit registrierter BackChannelLogoutUri aus und widerruft alle Grants.

ParameterErforderlichBeschreibung
id_token_hintOptionalDas ID-Token — wird zur Validierung der post_logout_redirect_uri verwendet
post_logout_redirect_uriOptionalWohin nach dem Logout weitergeleitet wird (muss registriert sein)
stateOptionalOpaker Wert, der in der Weiterleitung zurückgegeben wird

Wenn eine gültige post_logout_redirect_uri angegeben wird und mit einer registrierten URI übereinstimmt, erhält der Benutzer eine 302-Weiterleitung. Andernfalls bestätigt eine JSON-Antwort, dass die Sitzung beendet wurde.

Back-Channel-Logout

Wenn sich ein Benutzer abmeldet, sendet Authagonal ein signiertes JWT an die BackChannelLogoutUri jedes Clients. Das JWT enthält sub, aud, iss und den http://schemas.openid.net/event/backchannel-logout-Event-Claim. Ihre Anwendung sollte die lokale Sitzung des Benutzers ungültig machen, wenn sie diese Benachrichtigung erhält.

SCIM 2.0 API-Referenz

Authagonal unterstützt das SCIM 2.0-Protokoll für die automatisierte Benutzer- und Gruppenbereitstellung. Identity Provider wie Okta, Azure AD und OneLogin können diese API verwenden, um Ihren Authagonal-Mandanten mit Ihrem Unternehmensverzeichnis synchron zu halten.

Basis-URL: https://{slug}.authagonal.io/scim/v2

Authentifizierung: Alle Anfragen erfordern ein Bearer-Token. Generieren Sie ein SCIM-Token im Portal unter Einstellungen > SCIM-Bereitstellung.

Allgemeine Header:

HeaderWert
AuthorizationBearer SCIM_TOKEN
Content-Typeapplication/scim+json

Listen-Endpunkte unterstützen Paginierung über die Query-Parameter startIndex (1-basiert) und count (max. 200) sowie Filterung über den filter-Parameter (z. B. userName eq "user@example.com").

Benutzer

GET /scim/v2/Users — Benutzer mit optionaler Paginierung und Filterung auflisten.

Query-ParameterBeschreibung
startIndex1-basierter Index des ersten Ergebnisses (Standard: 1)
countMaximale Anzahl von Ergebnissen pro Seite (max.: 200)
filterSCIM-Filterausdruck (z. B. userName eq "user@example.com")

GET /scim/v2/Users/{id} — Einen einzelnen Benutzer anhand seiner Authagonal-Benutzer-ID abrufen.

POST /scim/v2/Users — Einen neuen Benutzer erstellen. Gibt 201 Created zurück.

FeldErforderlichBeschreibung
userNameJaE-Mail-Adresse (muss innerhalb des Mandanten eindeutig sein)
name.givenNameNeinVorname
name.familyNameNeinNachname
displayNameNeinVollständiger Anzeigename
activeNeinOb der Benutzer aktiv ist (Standard: true)
externalIdNeinBezeichner vom vorgelagerten Identity Provider

PUT /scim/v2/Users/{id} — Vollständiger Ersatz einer Benutzerressource. Alle Felder müssen angegeben werden.

PATCH /scim/v2/Users/{id} — Teilweise Aktualisierung mittels SCIM PatchOp.

OperationUnterstützte PfadeBeispielwert
replaceactive, name.givenName, name.familyName, externalIdtrue / false oder ein Zeichenkettenwert
addname.givenName, name.familyName, externalIdEin Zeichenkettenwert
removeexternalId(kein Wert erforderlich)

DELETE /scim/v2/Users/{id} — Löscht den Benutzer vorläufig (deaktiviert das Konto und widerruft alle Tokens). Gibt 204 No Content zurück.

Create a user via SCIM
curl -X POST https://acme.authagonal.io/scim/v2/Users \
  -H "Authorization: Bearer SCIM_TOKEN" \
  -H "Content-Type: application/scim+json" \
  -d '{
    "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
    "userName": "jane@acme.com",
    "name": {
      "givenName": "Jane",
      "familyName": "Smith"
    },
    "displayName": "Jane Smith",
    "active": true,
    "externalId": "ext-12345"
  }'

Gruppen

GET /scim/v2/Groups — Alle Gruppen mit optionaler Paginierung und Filterung auflisten.

GET /scim/v2/Groups/{id} — Eine einzelne Gruppe anhand der ID abrufen, einschließlich ihrer Mitgliederliste.

POST /scim/v2/Groups — Eine neue Gruppe erstellen. Gibt 201 Created zurück.

FeldErforderlichBeschreibung
displayNameJaAnzeigename der Gruppe
membersNeinArray von Mitgliedsobjekten, jeweils mit einem value-Feld, das die Benutzer-ID enthält
externalIdNeinBezeichner vom vorgelagerten Identity Provider

PUT /scim/v2/Groups/{id} — Vollständiger Ersatz einer Gruppenressource (einschließlich ihrer Mitgliederliste).

PATCH /scim/v2/Groups/{id} — Teilweise Aktualisierung zum Hinzufügen oder Entfernen von Gruppenmitgliedern.

DELETE /scim/v2/Groups/{id} — Löscht die Gruppe endgültig. Gibt 204 No Content zurück.

Add members to a group via PATCH
curl -X PATCH https://acme.authagonal.io/scim/v2/Groups/GROUP_ID \
  -H "Authorization: Bearer SCIM_TOKEN" \
  -H "Content-Type: application/scim+json" \
  -d '{
    "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations": [
      {
        "op": "add",
        "path": "members",
        "value": [
          { "value": "USER_ID_1" },
          { "value": "USER_ID_2" }
        ]
      }
    ]
  }'

SCIM-Fehlerantworten

Wenn eine SCIM-Anfrage fehlschlägt, folgt der Antwortkörper dem SCIM-Fehlerschema: { "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "status": "400", "detail": "..." }. Häufige Statuscodes sind 400 (ungültige Anfrage), 404 (Ressource nicht gefunden), 409 (Konflikt / Duplikat) und 429 (Rate limitiert).

Portal API (Automatisierung)

Mit der Portal API kann Ihr eigenes Backend alles automatisieren, was Sie im Portal tun können — Benutzer, Clients, Gruppen, Rollen, Scopes, SSO-Verbindungen und Einstellungen verwalten — über eine Machine-to-Machine-Berechtigung. Es ist dieselbe API, die auch die Portal-Oberfläche aufruft.

Basis-URL: https://portal-api.<your-domain>/api/v1. Anfragen authentifizieren sich mit einem Bearer-Access-Token; der Mandant wird dem Token entnommen, nicht der URL.

API-Zugangsdaten erstellen

Öffnen Sie im Portal Clients → Create API credential, wählen Sie eine Zugriffsebene und vergeben Sie einen Namen. Authagonal erzeugt einen für die Portal API konfigurierten OAuth-client_credentials-Client und gibt eine Client-ID und ein Secret zurück.

Kopieren Sie das Secret sofort

Das Client-Secret wird nur einmal angezeigt, direkt nach der Erstellung. Speichern Sie es in Ihrem Secret-Manager, bevor Sie den Dialog schließen — wenn Sie es verlieren, löschen Sie die Zugangsdaten und erstellen Sie neue.

Zugriffsebenen

ScopeBerechtigungen
tenant:ownerVollzugriff, einschließlich destruktiver, ausschließlich dem Owner vorbehaltener Aktionen wie das Löschen des gesamten Mandanten.
tenant:adminAlles verwalten außer Owner-exklusiven Aktionen — Benutzer, Clients, SSO, Gruppen, Rollen, Branding und Einstellungen.
tenant:developerClients, Scopes und Bereitstellungs-Apps verwalten.
tenant:supportBenutzer für Support-Aufgaben lesen und verwalten.

Sie können nur gewähren, was Sie selbst besitzen

Zugangsdaten können nicht mehr Berechtigungen haben als die Person, die sie erstellt. Ein Administrator kann keine Owner-Zugangsdaten erstellen, und der administrative Scope der Plattform kann niemals an Zugangsdaten vergeben werden.

Token abrufen

Tauschen Sie die Zugangsdaten am Token-Endpunkt Ihres Admin-Mandanten gegen ein Access-Token — https://<your-tenant>.<your-domain>/connect/token — und senden Sie das Token anschließend als Bearer-Header an die Portal API. Tokens sind eine Stunde lang gültig.

Token abrufen und dann die API aufrufen
# 1. Exchange the credential for an access token (your tenant's token endpoint)
curl -X POST https://acme.authagonal.io/connect/token \
  -d grant_type=client_credentials \
  -d client_id=api-3f2a... \
  -d client_secret=YOUR_CLIENT_SECRET \
  -d scope=tenant:admin

# Response: { "access_token": "ey...", "token_type": "Bearer", "expires_in": 3600 }

# 2. Call the Portal API with the access token
curl https://portal-api.authagonal.io/api/v1/users \
  -H "Authorization: Bearer $ACCESS_TOKEN"

Endpunkte

Alle Pfade sind relativ zur Basis-URL und erfordern ein Bearer-Zugriffstoken. Der Scope neben jeder Gruppe ist die minimale Zugriffsebene, die die Anmeldedaten benötigen. List-Endpunkte akzeptieren die Query-Parameter startIndex und count.

Clientstenant:developer

GET/api/v1/clients— OAuth-Clients auflisten.

GET/api/v1/clients/{id}— Einen einzelnen Client per ID abrufen.

POST/api/v1/clients— Einen Client erstellen. Gibt die Client-ID zurück und, bei vertraulichen Clients, ein einmaliges Secret.

PUT/api/v1/clients/{id}— Einen Client aktualisieren (Redirect-URIs, Grant-Typen, Token-Lebensdauern, PKCE/PAR-Anforderungen).

DELETE/api/v1/clients/{id}— Einen Client löschen.

POST/api/v1/clients/api-credential— Eine Machine-to-Machine-Anmeldeinformation für die Portal-API erstellen.

Benutzertenant:support

GET/api/v1/users— Benutzer auflisten. Unterstützt startIndex, count und search (E-Mail-/Namenspräfix).

GET/api/v1/users/count— Gesamtzahl der Benutzer des Mandanten.

GET/api/v1/users/stats/mfa— Statistik zur MFA-Registrierung.

GET/api/v1/users/{id}— Einen einzelnen Benutzer abrufen.

POST/api/v1/users— Einen Benutzer mit E-Mail und Passwort erstellen.

PUT/api/v1/users/{id}— Einen Benutzer aktualisieren (Profil, E-Mail, aktiviert/gesperrt).

DELETE/api/v1/users/{id}— Einen Benutzer löschen.

GET/api/v1/users/{id}/mfa— Get a user's enrolled MFA methods.

DELETE/api/v1/users/{id}/mfa— Reset a user's MFA enrollment.

Rollentenant:admin

GET/api/v1/roles— Rollen auflisten.

POST/api/v1/roles— Eine Rolle erstellen.

DELETE/api/v1/roles/{id}— Eine Rolle löschen.

POST/api/v1/roles/assign— Einem Benutzer eine Rolle zuweisen.

POST/api/v1/roles/unassign— Einem Benutzer eine Rolle entziehen.

Gruppentenant:admin

GET/api/v1/groups— Gruppen auflisten.

GET/api/v1/groups/{id}— Eine Gruppe mit ihren Mitgliedern abrufen.

POST/api/v1/groups— Eine Gruppe erstellen.

POST/api/v1/groups/{id}/members— Mitglieder zu einer Gruppe hinzufügen.

DELETE/api/v1/groups/{groupId}/members/{userId}— Ein Mitglied aus einer Gruppe entfernen.

DELETE/api/v1/groups/{id}— Eine Gruppe löschen.

GET/api/v1/group-role-mappings— Gruppen-zu-Rollen-Zuordnungen auflisten (Rollen, die bei der Token-Ausstellung über die Gruppenmitgliedschaft gewährt werden).

Scopestenant:developer

GET/api/v1/scopes— API-Scopes auflisten.

POST/api/v1/scopes— Einen Scope erstellen.

DELETE/api/v1/scopes/{name}— Einen Scope löschen.

SSO-Verbindungentenant:admin

GET/api/v1/saml/connections— SAML-Verbindungen auflisten.

POST/api/v1/saml/connections— Eine SAML-Verbindung erstellen.

DELETE/api/v1/saml/connections/{id}— Eine SAML-Verbindung löschen.

GET/api/v1/oidc/connections— OIDC-Verbindungen auflisten.

POST/api/v1/oidc/connections— Eine OIDC-Verbindung erstellen.

DELETE/api/v1/oidc/connections/{id}— Eine OIDC-Verbindung löschen.

GET/api/v1/sso/domains— Die Domains auflisten, die an SSO-Verbindungen geleitet werden (Home-Realm-Discovery).

Brandingtenant:admin

GET/api/v1/branding— Das Mandanten-Branding abrufen (Farben, Logo, unterstützte Sprachen).

PUT/api/v1/branding— Das Mandanten-Branding aktualisieren.

Einstellungentenant:admin

GET/api/v1/settings— Mandanteneinstellungen abrufen (Webhooks, öffentliche Registrierung, Token-Richtlinie).

PUT/api/v1/settings— Mandanteneinstellungen aktualisieren.

POST/api/v1/settings/webhook-secret/regenerate— Das Webhook-Signatur-Secret rotieren.

POST/api/v1/settings/test-email— Eine Test-E-Mail mit der aktuellen E-Mail-Konfiguration senden.

Eigene Domains & E-Mailtenant:admin

GET/api/v1/custom-domains— Eigene Login-Domains und deren Verifizierungsstatus auflisten.

POST/api/v1/custom-domains— Eine eigene Domain hinzufügen.

POST/api/v1/custom-domains/{domain}/verify— DNS-Verifizierung für eine eigene Domain auslösen.

DELETE/api/v1/custom-domains/{domain}— Eine eigene Domain entfernen.

GET/api/v1/email/domains— Absender-E-Mail-Domains auflisten.

Audit-Logtenant:admin

GET/api/v1/audit— Das Audit-Log des Mandanten abfragen.

Benutzer per SCIM bereitstellen

Für die Massenbereitstellung von Benutzern und Gruppen aus einem IdP (Entra, Okta) verwenden Sie die SCIM-2.0-API statt dieser Endpunkte.

Beispiel: Benutzer erstellen

POST /api/v1/users
curl -X POST https://portal-api.authagonal.io/api/v1/users \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "ada@acme.com",
    "password": "S3cure-temp-passw0rd",
    "firstName": "Ada",
    "lastName": "Lovelace"
  }'

# 200 OK
# { "userId": "8f3a...", "email": "ada@acme.com" }

Alles, was die Oberfläche kann

Die Portal API stellt dieselben Endpunkte bereit, die die Portal-Oberfläche verwendet, sodass jede Operation, die Sie im Portal ausführen können, automatisiert werden kann — abhängig von der Zugriffsebene der Zugangsdaten.

Authentifizierungsabläufe

Authentifizierungsabläufe beschreiben, wie Endbenutzer mit Ihrem Authagonal-Mandanten interagieren — Anmeldung, Registrierung, Passwortzurücksetzung und MFA-Einrichtung. Diese Endpunkte werden von der gehosteten Anmeldeseite verwendet und können direkt aufgerufen werden, wenn Sie eine benutzerdefinierte Anmeldeoberfläche erstellen.

Anmeldung

POST /api/auth/login

Authentifiziert einen Benutzer mit E-Mail und Passwort. Bei Erfolg wird ein Sitzungs-Cookie signiert und das Benutzerprofil zurückgegeben. Wenn MFA konfiguriert ist, zeigt die Antwort an, dass ein zweiter Faktor erforderlich ist, bevor die Sitzung vollständig hergestellt wird.

Anfragekörper:

Login request
{
  "email": "user@example.com",
  "password": "correct-horse-battery-staple"
}

Erfolgsantwort:

FeldTypBeschreibung
userIdstringEindeutiger Benutzerbezeichner
emailstringE-Mail-Adresse des Benutzers
namestringVollständiger Anzeigename
mfaAvailablebooleanOb der Benutzer MFA-Methoden registriert hat

MFA-erforderlich-Antwort: Wenn der Benutzer MFA registriert hat, enthält die Antwort mfaRequired: true zusammen mit einer challengeId und einem methods-Array mit verfügbaren MFA-Methoden.

MFA-Einrichtung-erforderlich-Antwort: Wenn der Mandant MFA erfordert, der Benutzer sich aber noch nicht registriert hat, enthält die Antwort mfaSetupRequired: true mit einem setupToken für den Registrierungsablauf.

Fehlerantworten:

FehlercodeHTTP-StatusBeschreibung
invalid_credentials401E-Mail oder Passwort ist falsch
account_disabled403Das Konto wurde von einem Administrator deaktiviert
email_not_confirmed403Der Benutzer hat seine E-Mail-Adresse nicht verifiziert
locked_out423Konto ist vorübergehend gesperrt (enthält retryAfter in Sekunden)
sso_required409E-Mail-Domain hat SSO konfiguriert (enthält redirectUrl)

SSO-Prüfung: Wenn die E-Mail-Domain des Benutzers eine SSO-Verbindung konfiguriert hat, gibt der Anmeldeendpunkt sso_required mit einer redirectUrl zurück. Der Client sollte den Benutzer zum SSO-Anbieter weiterleiten.

Kontosperrung: Nach maxFailedAttempts aufeinanderfolgenden fehlgeschlagenen Anmeldeversuchen wird das Konto für lockoutDurationMinutes gesperrt. Beide Werte sind in den Mandanteneinstellungen konfigurierbar.

Gehostete Anmeldeseite

Der Anmeldeendpunkt wird typischerweise von der gehosteten Anmeldeseite aufgerufen, nicht direkt von Ihrer Anwendung. Verwenden Sie den OIDC-Authorization-Code-Flow, um die Authentifizierung zu starten — Ihre Benutzer werden automatisch zur gehosteten Anmeldeseite weitergeleitet.

Registrierung

POST /api/auth/register

Erstellt ein neues Benutzerkonto. Eine Bestätigungs-E-Mail wird automatisch gesendet — der Benutzer muss seine E-Mail verifizieren, bevor er sich anmelden kann.

Anfragekörper:

Registration request
{
  "email": "newuser@example.com",
  "password": "a-strong-password-here",
  "firstName": "Jane",
  "lastName": "Smith"
}
FeldErforderlichBeschreibung
emailJaE-Mail-Adresse (muss eindeutig sein)
passwordJaMuss der Passwortrichtlinie des Mandanten entsprechen
firstNameNeinVorname
lastNameNeinNachname

Erfolg: 201 Created mit der userId des neuen Kontos.

Fehlerantworten:

FehlercodeHTTP-StatusBeschreibung
email_already_registered409Ein Konto mit dieser E-Mail-Adresse existiert bereits
weak_password400Passwort entspricht nicht der Passwortrichtlinie des Mandanten
rate_limited429Zu viele Registrierungsversuche
provisioning_rejected422Ein Bereitstellungs-Webhook hat die Registrierung abgelehnt

Passwortrichtlinie

Prüfen Sie die Passwortanforderungen des Mandanten vor der Übermittlung über GET /api/auth/password-policy. Dies gibt die Mindestlänge, erforderliche Zeichenklassen und ob die Prüfung auf kompromittierte Passwörter aktiviert ist zurück.

Passwortzurücksetzung

POST /api/auth/forgot-password

Fordert eine E-Mail zur Passwortzurücksetzung an. Der Endpunkt gibt immer eine Erfolgsantwort zurück, unabhängig davon, ob die E-Mail existiert, um E-Mail-Enumeration zu verhindern.

Forgot password request
{
  "email": "user@example.com"
}

POST /api/auth/reset-password

Setzt das Passwort des Benutzers mit dem Token aus dem E-Mail-Link zurück.

Reset password request
{
  "token": "RESET_TOKEN_FROM_EMAIL",
  "newPassword": "new-strong-password"
}

Nebeneffekte einer erfolgreichen Passwortzurücksetzung:

  • Zähler für fehlgeschlagene Anmeldeversuche wird auf null zurückgesetzt
  • Alle bestehenden Refresh-Tokens werden widerrufen
  • Ein neuer Sicherheitsstempel wird generiert (alle bestehenden Sitzungen werden ungültig)

MFA-Einrichtung & -Verifizierung

Authagonal unterstützt drei MFA-Methoden: TOTP (Authenticator-Apps), WebAuthn (Sicherheitsschlüssel und Biometrie) und Einmal-Wiederherstellungscodes.

TOTP-Einrichtung

POST /api/auth/mfa/totp/setup — Gibt eine QR-Code-Daten-URI und einen manuellen Eingabeschlüssel zurück. Der Benutzer scannt den QR-Code mit seiner Authenticator-App (Google Authenticator, Authy, 1Password usw.) und bestätigt dann die Registrierung.

POST /api/auth/mfa/totp/confirm — Bestätigt die TOTP-Registrierung durch Validierung eines 6-stelligen Codes aus der Authenticator-App.

Confirm TOTP enrollment
{
  "code": "123456"
}

WebAuthn-Einrichtung

POST /api/auth/mfa/webauthn/setup — Gibt Optionen zur Credential-Erstellung für die WebAuthn-API zurück. Der Browser ruft navigator.credentials.create() mit diesen Optionen auf.

POST /api/auth/mfa/webauthn/confirm — Bestätigt die WebAuthn-Registrierung durch Übermittlung der Attestierungsantwort des Browsers.

Wiederherstellungscodes

POST /api/auth/mfa/recovery/generate — Generiert 10 einmalig verwendbare 8-Zeichen-Wiederherstellungscodes. Jeder Code kann genau einmal verwendet werden, um MFA zu umgehen.

Wiederherstellungscodes werden nur einmal angezeigt

Wiederherstellungscodes werden nur zum Zeitpunkt der Generierung angezeigt und können später nicht abgerufen werden. Wenn ein Benutzer sowohl sein Authenticator-Gerät als auch seine Wiederherstellungscodes verliert, muss ein Administrator seine MFA-Anmeldedaten manuell im Portal löschen, bevor er sich erneut anmelden kann.

MFA-Verifizierung

POST /api/auth/mfa/verify — Schließt die MFA-Challenge nach einer erfolgreichen Passwort-Anmeldung ab.

FeldErforderlichBeschreibung
challengeIdJaDie Challenge-ID aus der Anmeldeantwort
methodJa"totp", "recovery" oder "webauthn"
codeTOTP / Wiederherstellung6-stelliger TOTP-Code oder 8-Zeichen-Wiederherstellungscode
assertionWebAuthnDie Assertion-Antwort von navigator.credentials.get()

MFA-Status

GET /api/auth/mfa/status — Gibt die aktuell registrierten MFA-Methoden des Benutzers zurück.

SSO-Anmeldeablauf

Authagonal unterstützt sowohl SAML 2.0- als auch OIDC-basierte SSO-Verbindungen. Domänbasiertes Routing erkennt automatisch, welcher SSO-Anbieter basierend auf der E-Mail-Adresse des Benutzers verwendet werden soll.

SSO-Prüfung

GET /api/auth/sso-check?email=user@acme.com

FeldTypBeschreibung
ssoRequiredbooleanOb die E-Mail-Domain SSO erfordert
providerTypestring"saml" oder "oidc"
connectionIdstringDer SSO-Verbindungsbezeichner
redirectUrlstringDie URL, zu der der Benutzer für die SSO-Anmeldung weitergeleitet wird

SAML-Flow

Der Benutzer wird zu GET /saml/{connectionId}/login weitergeleitet, das einen SAML AuthnRequest an den Identity Provider sendet. Der IdP authentifiziert den Benutzer und sendet eine SAML-Antwort an den Assertion Consumer Service (ACS)-Endpunkt zurück. Authagonal validiert die Assertion, erstellt oder aktualisiert den Benutzer und signiert ein Sitzungs-Cookie.

SAML-Metadaten zur Konfiguration Ihres IdP sind verfügbar unter GET /saml/{connectionId}/metadata.

OIDC-Flow

Der Benutzer wird zu GET /oidc/{connectionId}/login weitergeleitet, das zum vorgelagerten Identity Provider mit PKCE weiterleitet. Nachdem sich der Benutzer authentifiziert hat, tauscht der Callback unter /oidc/callback den Authorization Code aus, validiert das ID-Token und erstellt oder aktualisiert den Benutzer.

JIT-Bereitstellung: Sowohl SAML- als auch OIDC-Flows unterstützen Just-in-Time-Bereitstellung. Wenn der Benutzer noch nicht im Mandanten existiert, wird er automatisch aus den Claims des Identity Providers erstellt. Wenn er bereits existiert, werden seine Profilattribute aktualisiert, um mit den neuesten Werten des Providers übereinzustimmen.

Domänbasiertes Routing

Domänbasiertes Routing bedeutet, dass Ihre Benutzer nicht wissen müssen, welchen SSO-Anbieter sie verwenden. Die Eingabe ihrer E-Mail-Adresse genügt — Authagonal ordnet die Domain der richtigen SSO-Verbindung zu und leitet automatisch weiter.

Eine eigene Login-Oberfläche erstellen

Ersetzen Sie die von Authagonal gehosteten Anmelde-, Registrierungs-, Passwort-Reset- und MFA-Bildschirme durch Ihre eigene Oberfläche, während Authagonal weiterhin Authentifizierung, MFA, SSO, Sitzungen und Token-Ausstellung übernimmt. Zwei Wege: Nutzen Sie unsere React-Komponentenbibliothek oder rufen Sie die Auth-API direkt aus einem beliebigen Framework auf. Es ist optional — aktivieren Sie zuerst Custom login UI in den Mandanteneinstellungen.

Voraussetzung: eine eigene Domain auf Ihrer Root-Domain

Die Login-Sitzung ist ein First-Party-Cookie, daher müssen sich Ihre Oberfläche und der Authagonal-Auth-Server eine registrierbare Domain teilen. Richten Sie eine eigene Auth-Domain bei Authagonal auf derselben Root-Domain ein, auf der Ihre App läuft — z. B. Auth unter login.acme.com, App unter app.acme.com. Die Einstellung Custom login UI bleibt deaktiviert, bis eine aktive eigene Domain existiert.

Ihre OberflächeAuth-HostFunktioniert?
app.acme.comlogin.acme.com✅ gleiche Root-Domain
acme.comauth.acme.com✅ gleiche Root-Domain
app.acme.comacme.authagonal.io❌ Cross-Site
myapp.iologin.acme.com❌ Cross-Site

Warum eine eigene Domain erforderlich ist

Ein Cross-Site-Sitzungscookie wäre ein Third-Party-Cookie — das Browser (Safari, Chrome) schrittweise abschaffen. Auth auf Ihrer eigenen Root-Domain zu belassen, macht das Cookie zu einem First-Party-Cookie und zukunftssicher, und genau das setzt die Plattform durch: Cross-Origin-Auth-Aufrufe werden nur von einem Origin akzeptiert, das sich die Root-Domain des Auth-Hosts teilt.

Fügen Sie außerdem den Origin Ihrer Oberfläche (z. B. https://app.acme.com) zu den Allowed CORS origins Ihres OAuth-Clients hinzu — dieselbe Liste, die Sie für den Token-Austausch festlegen.

React: @authagonal/login

npm i @authagonal/login liefert die Auth-Logik und die UI als ein Paket — dasselbe, auf dem die von Authagonal gehostete Anmeldung basiert. Wählen Sie Ihre Abstraktionsebene:

  • Vollständige App — binden Sie App ein und gestalten Sie sie per Branding.
  • Seiten zusammenstellen — verwenden Sie LoginPage, MfaChallengePage, ResetPasswordPage… in Ihrem eigenen Layout.
  • Primitive + Logik — erstellen Sie eigene Bildschirme mit AuthLayout/Button/Input und dem API-Client (login, mfaVerify, forgotPassword, …).
Ein eigener Bildschirm mit der @authagonal/login-API
import { AuthLayout, Input, Button, login, ApiRequestError } from '@authagonal/login';

function MyLogin() {
  async function onSubmit(email: string, password: string) {
    try {
      const res = await login({ email, password });        // POST /login (sets the session cookie)
      if (res.mfaRequired) {/* render your MFA step → mfaVerify(...) */}
      else window.location.href = res.returnUrl;            // hand off to /connect/authorize
    } catch (e) {
      if (e instanceof ApiRequestError) {/* show e.message */}
    }
  }
  return <AuthLayout>{/* your own markup + <Input/> <Button/> */}</AuthLayout>;
}

Beliebiges Framework: die Auth-API aufrufen

Nicht auf React? Rufen Sie die Auth-Flow-Endpunkte direkt auf (unter /api/auth) und übergeben Sie dann an den standardmäßigen OIDC-/connect/authorize-Flow. Senden Sie credentials: 'include', damit das Sitzungscookie gespeichert wird.

EndpunktZweck
POST /api/auth/loginAuthentifizieren; gibt mfaRequired oder eine Return-URL zurück
POST /api/auth/registerSelbstregistrierung (wenn aktiviert)
POST /api/auth/forgot-passwordEine Passwortzurücksetzung starten
POST /api/auth/reset-passwordEine Passwortzurücksetzung abschließen
GET /api/auth/password-policyPasswortrichtlinie (zum Anzeigen der Regeln)
POST /api/auth/mfa/*MFA-Einrichtung + Verifizierung (TOTP, WebAuthn, Wiederherstellung)

credentials: 'include' verwenden

Die Sitzung ist ein Cookie, daher müssen Ihre Fetch-Aufrufe Credentials senden. Cross-Origin-Aufrufe gelingen nur, wenn Custom login UI aktiviert ist und Ihr Origin sich die Root-Domain des Auth-Hosts teilt — andernfalls werden sie mit 403 abgelehnt.
Authentifizieren, dann an OIDC übergeben
# 1. Authenticate (browser fetch — credentials:'include' so the session cookie is stored)
curl -i -X POST https://login.acme.com/api/auth/login \
  -H "Content-Type: application/json" \
  -H "Origin: https://app.acme.com" \
  --data '{"email":"jane@acme.com","password":"..."}'
# (handle {"mfaRequired":true} → POST /api/auth/mfa/verify, then continue)

# 2. Hand off to the OAuth flow — top-level navigation to the authorize endpoint with PKCE:
# https://login.acme.com/connect/authorize?client_id=my-app&redirect_uri=...&response_type=code
#   &scope=openid%20profile%20email&code_challenge=...&code_challenge_method=S256
# The session cookie (same-site) authenticates the user; you get back a code → exchange at /connect/token.

Tarife & Limits

Authagonal bietet vier Tarifstufen. Alle Tarife beinhalten alle Funktionen -- der einzige Unterschied ist das Limit für monatlich aktive Benutzer (MAU) und die Überschreitungspreise.

Tarifstufen

TarifMAU-LimitÜberschreitungÜberschreitungskosten/Benutzer
Starter1,000Nein
Pro5.000Ja$0,04/Benutzer
Scale25.000Ja$0,025/Benutzer
Enterprise100.000Ja$0,015/Benutzer

Monatlich aktive Benutzer (MAU)

Ein monatlich aktiver Benutzer ist jeder eindeutige Benutzer, der sich mindestens einmal während eines Abrechnungsmonats erfolgreich authentifiziert. Über SCIM bereitgestellte Benutzer, die sich nicht angemeldet haben, zählen nicht zu Ihrer MAU-Gesamtzahl.

Überschreitung -- Wenn Ihr Tarif Überschreitungen unterstützt, werden Benutzer über dem MAU-Limit zum in der Tariftabelle oben angegebenen Preis pro Benutzer abgerechnet. Sie können eine Überschreitungsobergrenze festlegen, um Ihre maximalen Ausgaben für den Abrechnungszeitraum zu begrenzen.

Durchsetzung -- Wenn Ihr Tarif keine Überschreitung unterstützt (Starter), können sich Benutzer über dem MAU-Limit nicht anmelden, bis der nächste Abrechnungszeitraum beginnt oder Sie auf einen Tarif mit Überschreitungsunterstützung upgraden.

Vollständiger Funktionsumfang in jedem Tarif

Alle Tarife beinhalten den vollständigen Funktionsumfang -- SSO, SCIM, MFA, eigene Domains, Branding, Webhooks, Audit-Protokoll und das Portal.