Skip to Content

Benutzerdefinierte JWT-Claims

Benutzerdefinierte JWT-Claims ermöglichen es dir, anwendungsspezifische Daten zu den Access Tokens deiner Benutzer hinzuzufügen. Anstatt bei jeder Anfrage deine Datenbank nach Benutzermetadaten abzufragen, kannst du die benötigten Informationen in das Token einbetten und darauf aus deinen Backends und Frontends zugreifen — ohne zusätzliche API-Aufrufe.

Häufige Anwendungsfälle:

  • Abteilung oder Kostenstelle eines Benutzers an den Token anhängen
  • Abonnementplan oder Feature-Flags als Token-Claim einbetten
  • Spracheinstellungen oder Theme-Präferenzen in Client-Libraries abrufbar machen
  • Benutzerdefinierte IDs aus Drittanbieter-Systemen weitergeben (CRM-IDs, ERP-IDs, etc.)

Benutzerdefinierte Claims werden in jedem Access Token eingebettet, das an deine Anwendung ausgestellt wird. Halte die Claim-Werte kurz (unter 100 Zeichen für Strings) und lege nicht mehr als 10 benutzerdefinierte Claims an. Große Token können HTTP-Header-Limits überschreiten und zu 431 Request Header Fields Too Large-Fehlern führen.


Claim-Typen

Auris unterstützt vier Claim-Typen:

STATIC

Ein fester Wert, der sich nie ändert. Nützlich für das Einbetten von Umgebungsbezeichnern oder unveränderlichen Anwendungskonstanten.

{ "type": "STATIC", "claimKey": "environment", "value": "production" }

USER_ATTRIBUTE

Ein Wert aus dem Profil des authentifizierten Benutzers. Unterstützte Schlüssel:

SchlüsselBeschreibung
emailPrimäre E-Mail-Adresse des Benutzers
firstNameVorname des Benutzers
lastNameNachname des Benutzers
usernameBenutzername
phoneNumberPrimäre Telefonnummer (E.164-Format)
metadataGesamtes Metadaten-Objekt (nicht empfohlen — sehr groß)
metadata.{key}Ein einzelner Metadaten-Schlüssel, z.B. metadata.department
{ "type": "USER_ATTRIBUTE", "claimKey": "department", "attributeKey": "metadata.department" }

ROLE_BASED

Ein Wert, der auf der Rolle des Benutzers basiert. Die erste übereinstimmende Rolle gewinnt; wenn keine Rolle übereinstimmt, wird der defaultValue verwendet.

{ "type": "ROLE_BASED", "claimKey": "plan", "roleMapping": [ { "role": "enterprise", "value": "enterprise" }, { "role": "pro", "value": "pro" }, { "role": "starter", "value": "starter" } ], "defaultValue": "free" }

EXPRESSION

Ein benutzerdefinierter Ausdruck, der für jeden Token ausgewertet wird. Expressions werden in einer gesicherten Sandbox ausgeführt und haben Zugriff auf:

VariableBeschreibung
userBenutzerobjekt (id, email, firstName, lastName, username, phoneNumber)
rolesArray von Rollenbezeichnungen, die dem Benutzer zugewiesen sind
metadataMetadaten-Objekt des Benutzers
{ "type": "EXPRESSION", "claimKey": "email_domain", "expression": "user.email.split('@')[1]" }

Expressions haben keinen Zugriff auf require, import, process, eval, Netzwerkaufrufe oder das Dateisystem. Expressions, die diese Objekte referenzieren, werden abgelehnt und geben den defaultValue zurück.


Reservierte Claims

Die folgenden Claims sind von Auris reserviert und können nicht überschrieben werden:

ClaimBeschreibung
issAussteller (deine Auris-Domain)
subSubject (Benutzer-ID)
audAudience
expAblaufzeit
iatAusstellungszeitpunkt
jtiJWT-ID
typeToken-Typ (access / m2m)
scopeGewährte Scopes
rolesRollenliste des Benutzers
emailE-Mail des Benutzers
nameVollständiger Name des Benutzers

Wenn du versuchst, einen dieser Claims zu überschreiben, gibt die API einen Validierungsfehler zurück.


Einrichten über die Console

  1. Öffne die Auris Console → Applications und wähle deine Anwendung aus.
  2. Navigiere zum Tab Custom Claims.
  3. Klicke auf Add Claim.
  4. Wähle Typ, Claim-Schlüssel und Quellkonfiguration (Wert, Attribut, Rollenzuordnung oder Expression).
  5. Klicke auf Preview, um das genaue Payload für einen bestehenden Testbenutzer zu sehen.
  6. Klicke auf Activate, um den Claim für alle neuen Token zu aktivieren.

Änderungen gelten nur für neu ausgestellte Token. Bestehende gültige Token behalten ihr altes Payload, bis sie ablaufen. Wenn du sofortige Auswirkungen benötigst, musst du alle Benutzersitzungen über die API ungültig machen.


Beispiele

Benutzer-Abteilung einbetten

Speichere die Abteilung im Benutzer-Metadaten-Feld und binde es als Claim ein:

{ "type": "USER_ATTRIBUTE", "claimKey": "department", "attributeKey": "metadata.department", "defaultValue": "general" }

Das resultierende Token-Payload enthält: "department": "engineering"

Abonnementplan als Badge

{ "type": "ROLE_BASED", "claimKey": "subscription_plan", "roleMapping": [ { "role": "enterprise", "value": "enterprise" }, { "role": "pro", "value": "pro" }, { "role": "starter", "value": "starter" } ], "defaultValue": "free" }

E-Mail-Domain extrahieren (EXPRESSION)

Nützlich, um den E-Mail-Anbieter oder den Unternehmensbereich zu identifizieren:

{ "type": "EXPRESSION", "claimKey": "email_domain", "expression": "user.email.split('@')[1]", "defaultValue": "unknown" }

Statische Umgebungs-ID

{ "type": "STATIC", "claimKey": "env", "value": "prod-eu-west-1" }

Claims lesen

import { AurisClient } from '@auris/js' const auris = new AurisClient({ domain: 'auth.yourdomain.com', clientId: 'your-client-id' }) const session = await auris.getSession() const payload = session.decodedAccessToken console.log(payload.department) // 'engineering' console.log(payload.subscription_plan) // 'pro' console.log(payload.email_domain) // 'yourdomain.com' console.log(payload.env) // 'prod-eu-west-1'

Im Backend nach der Token-Verifizierung:

import { verifyToken } from '@auris/node' const payload = await verifyToken(accessToken, { domain: process.env.AURIS_DOMAIN!, audience: process.env.AURIS_AUDIENCE!, }) // Alle benutzerdefinierten Claims sind typisiert zugänglich const department = payload.department as string const plan = payload.subscription_plan as string

API-Referenz

GET/api/applications/:id/custom-claimsRequires: manage:applications

Alle benutzerdefinierten Claims für eine Anwendung auflisten.

POST/api/applications/:id/custom-claimsRequires: manage:applications

Einen neuen benutzerdefinierten Claim erstellen. Body: { claimKey, type, value?, attributeKey?, roleMapping?, expression?, defaultValue? }.

PATCH/api/applications/:id/custom-claims/:claimIdRequires: manage:applications

Einen bestehenden Claim aktualisieren.

DELETE/api/applications/:id/custom-claims/:claimIdRequires: manage:applications

Einen Claim löschen. Gilt für neu ausgestellte Token.

POST/api/applications/:id/custom-claims/previewRequires: manage:applications

Eine Claim-Konfiguration gegen einen Testbenutzer vorschau prüfen. Body: { claim: ClaimConfig, userId: string }. Gibt { claimKey: string, resolvedValue: unknown } zurück.


Hinweise zur Token-Größe

HTTP-Server lehnen typischerweise Anfragen mit Headern über 8 KB ab. Da Access Tokens in Authorization: Bearer-Headern übertragen werden, gilt:

  • Strings unter 100 Zeichen pro Claim-Wert halten
  • Nicht mehr als 10 benutzerdefinierte Claims verwenden
  • Keine vollständigen Metadaten-Objekte einbetten — nur metadata.{key}
  • Keine Arrays einbetten, es sei denn, sie sind klein (z.B. 3–5 kurze Strings)
  • Claims über die Preview-Funktion der Console testen, bevor du sie in der Produktion aktivierst

Verwandte Anleitungen