JWT-Authentifizierung
Identifiziere Nutzer in deinem Hilfe-Widget, ohne dass eine separate Anmeldung erforderlich ist. Wenn Nutzer in deiner App angemeldet sind, kannst du ihre Identität über einen mit deinem Backend signierten JWT-Token an Ferndesk übergeben.
Du benötigst dein JWT-Geheimnis aus Help Center > Access Control und die installierte Ferndesk SDK.
JWT identify ist in allen Tarifen verfügbar und funktioniert sowohl im Open- als auch im Locked-Zugriffsmodus. Du musst dein Help Center nicht sperren oder upgraden, um ein Geheimnis zu generieren.
So funktioniert es
Dreistufiger Ablauf:
Dein Frontend erkennt einen angemeldeten Nutzer
Dein Backend generiert einen signierten JWT mit Nutzerdetails
Dein Frontend ruft
Ferndesk('identify', { jwt })auf
Das Help Center und das Widget wissen jetzt, wer der Nutzer ist – für Authentifizierung, Personalisierung und Analysen.
Die identify-Methode funktioniert nur von derselben Domain wie dein Help Center oder von einer Subdomain der ersten Ebene. Wenn sich dein Help Center unter help.example.com befindet, kannst du dich von app.example.com aus identifizieren, aber nicht von otherdomain.com.
JWT-Geheimnis
Bevor du JWTs signieren kannst, brauchst du ein Signiergeheimnis aus deinem Ferndesk-Dashboard:
Gehe zu Help Center > Access Control.
Erweitere im Abschnitt User identification die Zeile JWT identify.
Klicke auf Generate Secret.
Das Generieren eines Geheimnisses aktiviert automatisch die JWT-Authentifizierung für dein Help Center. Das Geheimnis wird nur einmal angezeigt. Kopiere es sofort und bewahre es sicher in den Umgebungsvariablen deines Backends auf. Du wirst es später nicht mehr ansehen können.
Wenn du das Geheimnis rotieren musst, klicke auf Regenerate. Dadurch wird das vorhandene Geheimnis ersetzt und alle mit dem alten Geheimnis signierten Tokens werden ungültig. Aktualisiere dein Backend mit dem neuen Geheimnis, bevor sich dies auf Nutzer auswirkt.
Du kannst pro Help Center nur ein JWT-Geheimnis haben. Generate Secret ist nur verfügbar, wenn noch kein Geheimnis vorhanden ist. Regenerate ist verfügbar, wenn bereits ein Geheimnis existiert.
Browser-Anmeldung für MCP- und KI-Clients
JWT identify läuft in deinem Produkt im Hintergrund. KI-Clients melden Nutzer stattdessen über einen Browser an.
In JWT identify unter Browser sign-in (MCP and AI clients):
Gib deine SSO login page URL ein. Ferndesk leitet Nutzer mit einem
return_to-Parameter dorthin weiter. Nach der Anmeldung leite zureturn_tomit einemjwt-Abfrageparameter weiter.Aktiviere optional Allow email sign-in for AI clients, damit bestehende Nutzer beim Verbinden eines KI-Clients den Besitz ihrer E-Mail-Adresse nachweisen können. Lasse dies deaktiviert, wenn Benutzerattribute sensible Inhalte steuern.
Klicke auf Save changes.
Verwende eine gültige http:- oder https:-URL. Ungültige Werte zeigen Enter a valid login page URL, including https:// an.
Verwandt: Ferndesk mit KI-Tools verwenden · Lesern erlauben, dein Help Center in KI-Tools zu verwenden
JWT serverseitig generieren
Erstelle einen Endpunkt, der einen signierten Token zurückgibt. Ferndesk benötigt keine iss- (Issuer) oder aud- (Audience) Claims.
Erforderliche Claims:
sub(string, erforderlich): Eindeutige ID in deinem System, die diesen Nutzer identifiziert. Dies ist der primäre Identitätsschlüssel.email(string, erforderlich): E-Mail-Adresse des Nutzersexp(number, erforderlich): Ablaufzeitstempel des Tokensiat(number, erforderlich): Ausstellungszeitstempel des Tokens
Optionale Claims:
name(string, optional): AnzeigenamecustomAttributes(object, optional): Zusätzliche Nutzerattribute. Du kannst auchmetadataverwenden; beide Schlüssel werden akzeptiert.
Der sub-Claim muss für jeden Nutzer stabil bleiben. Ferndesk verwendet dieses Subject, um Nutzer zu identifizieren und zu verknüpfen. Wenn sich das sub eines Nutzers ändert, wird er nicht mit seiner früheren Help-Center-Identität verknüpft.
Node.js-Beispiel:
const jwt = require('jsonwebtoken');
app.get('/api/ferndesk-token', async (req, res) => {
if (!req.user) return res.status(401).json({ error: 'Not authenticated' });
const now = Math.floor(Date.now() / 1000);
const token = jwt.sign({
sub: req.user.id,
email: req.user.email,
name: req.user.name,
iat: now,
exp: now + 3600, // 1 hour
customAttributes: { plan: req.user.plan }
}, process.env.FERNDESK_JWT_SECRET, { algorithm: 'HS256' });
res.send(token);
});Python-Beispiel:
import jwt
import time
@app.route('/api/ferndesk-token')
def ferndesk_token():
if not current_user:
return {'error': 'Not authenticated'}, 401
now = int(time.time())
token = jwt.encode({
'sub': current_user.id,
'email': current_user.email,
'name': current_user.name,
'iat': now,
'exp': now + 3600,
'customAttributes': {'plan': current_user.plan}
}, os.environ['FERNDESK_JWT_SECRET'], algorithm='HS256')
return tokenGib dein JWT-Geheimnis niemals in clientseitigem Code preis. Speichere es nur serverseitig in Umgebungsvariablen.
Identify in deinem Frontend aufrufen
Rufe den Token aus deinem Backend ab und übergib ihn an die SDK:
Ferndesk('init', { widgetId: 'your-widget-id' });
fetch('/api/ferndesk-token').then(r => r.text())
.then(jwt => Ferndesk('identify', { jwt }))
.catch(err => console.error('Identification failed:', err));React-Beispiel:
useEffect(() => {
window.Ferndesk('init', { widgetId: 'your-widget-id' });
if (currentUser) {
fetch('/api/ferndesk-token')
.then(r => r.text())
.then(jwt => window.Ferndesk('identify', { jwt }));
}
}, [currentUser]);Rufe identify nach init, aber vor dem Öffnen des Widgets auf. Um dich abzumelden, initialisiere erneut, ohne identify aufzurufen.
Prüfen, ob alles funktioniert
Achte auf diese Anzeichen:
Browserkonsole: Keine Fehler. Ungültige JWTs zeigen
Ferndesk: identify failed - invalid jwtKontaktformular: E-Mail und Name werden vorausgefüllt
Analytics: Nutzersitzungen erscheinen in deinem Dashboard
Häufige Fehler
Ferndesk: identify requires a jwt
Fehlender jwt-Parameter. Prüfe, ob dein Backend einen JWT-String zurückgibt.
invalid jwt
Die Signaturprüfung oder die Validierung der Claims ist fehlgeschlagen. Prüfe:
Das richtige JWT-Geheimnis stimmt mit dem in Ferndesk gespeicherten überein
Der Token ist nicht abgelaufen
Der Algorithmus ist HS256
Erforderliche Claims sind vorhanden:
sub,email,expundiat
JWT subject does not match the existing help-center user
Dieser Fehler tritt auf, wenn die E-Mail-Adresse eines Nutzers in deinem Help Center bereits vorhanden ist, aber mit einer anderen Subject-ID. Das bedeutet, dass sich jemand zuvor mit dieser E-Mail-Adresse über ein anderes Identitätssystem oder einen anderen sub-Wert angemeldet hat.
Zur Behebung:
Stelle sicher, dass dein Backend für jeden Nutzer immer denselben
subsendetWenn du das Nutzers-ID-System geändert hast, muss der betroffene Nutzer in Ferndesk erneut bereitgestellt werden
must be called from same domain or 1-level subdomain
Domain-Mismatch. Deine App und dein Help Center müssen dieselbe Root-Domain teilen.
Der sub-Claim ist der primäre Bezeichner für Nutzer. email ist zwar erforderlich, aber Ferndesk bindet die Identität an das Subject und nicht nur an die E-Mail-Adresse. So wird eine Kontoübernahme verhindert, wenn sich E-Mail-Adressen ändern oder wiederverwendet werden.
Sicherheitshinweise
Token-Ablauf festlegen (1 Stunde ist üblich)
Tokens nur für authentifizierte Nutzer generieren
Überall HTTPS verwenden
Geheimnisse niemals in die Versionsverwaltung einchecken
Halte deine
sub-Werte stabil. Ferndesk speichert die Identität anhand des Subjects.