Authentification JWT
Identifiez les utilisateurs dans votre widget d'aide sans exiger de connexion distincte. Lorsque les utilisateurs sont connectés à votre application, vous pouvez transmettre leur identité à Ferndesk à l'aide d'un jeton JWT signé par votre backend.
Vous aurez besoin de votre secret JWT dans Help Center > Access Control, ainsi que du SDK Ferndesk installé.
L'identification JWT est disponible avec tous les forfaits et fonctionne avec les modes d'accès ouvert et verrouillé. Vous n'avez pas besoin de verrouiller votre centre d'aide ni de changer de forfait pour générer un secret.
Fonctionnement
Flux en trois étapes :
Votre frontend détecte qu'un utilisateur est connecté
Votre backend génère un JWT signé contenant les informations de l'utilisateur
Votre frontend appelle
Ferndesk('identify', { jwt })
Le centre d'aide et le widget connaissent désormais l'identité de l'utilisateur à des fins d'authentification, de personnalisation et d'analyse.
L'identification JWT accepte un JWT provenant de n'importe quelle origine HTTPS. Les requêtes ultérieures de session du widget sont liées à l'origine exacte qui a envoyé le JWT. Le widget et le centre d'aide doivent être servis depuis exactement la même origine, avec le même schéma, le même hôte et le même port.
Secret JWT
Avant de pouvoir signer des JWT, vous devez obtenir un secret de signature depuis votre tableau de bord Ferndesk :
Accédez à Help Center > Access Control.
Dans la section User identification, développez la ligne JWT identify.
Cliquez sur Generate Secret.
La génération d'un secret active automatiquement l'authentification JWT pour votre centre d'aide. Le secret est masqué après sa génération. Copiez-le immédiatement et stockez-le de manière sécurisée dans les variables d'environnement de votre backend. Vous pourrez l'afficher à nouveau ultérieurement depuis le tableau de bord.
Si vous devez renouveler le secret, cliquez sur Regenerate. Le secret existant sera remplacé et tous les jetons signés avec l'ancien seront invalidés. Mettez votre backend à jour avec le nouveau secret avant que les utilisateurs ne soient affectés.
Vous ne pouvez avoir qu'un seul secret JWT par centre d'aide. Generate Secret est disponible uniquement lorsqu'aucun secret n'existe. Regenerate est disponible lorsqu'un secret existe déjà.
Connexion au navigateur pour MCP et les clients IA
L'identification JWT fonctionne silencieusement dans votre produit. Les clients IA connectent les utilisateurs via un navigateur à la place.
Dans JWT identify, sous Browser sign-in (MCP and AI clients) :
Saisissez l'URL de la page de connexion SSO. Ferndesk redirige les utilisateurs vers cette page avec un paramètre
return_to. Après la connexion, redirigez-les versreturn_toavec un paramètre de requêtejwt.Activez éventuellement Allow email sign-in for AI clients afin que les utilisateurs existants puissent prouver qu'ils possèdent leur adresse e-mail lorsqu'ils connectent un client IA. Laissez cette option désactivée si les attributs utilisateur contrôlent l'accès à du contenu sensible.
Cliquez sur Save changes.
Utilisez une URL http: ou https: valide. Les valeurs incorrectes affichent Enter a valid login page URL, including https://.
Articles associés : Utiliser Ferndesk avec des outils IA · Permettre aux lecteurs d'utiliser votre centre d'aide dans des outils IA
Générer le JWT côté serveur
Créez un endpoint qui renvoie un jeton signé. Ferndesk n'exige pas les claims iss (issuer) ou aud (audience).
Claims obligatoires :
sub(string, obligatoire) : identifiant unique dans votre système permettant d'identifier cet utilisateur. Il s'agit de la clé d'identité principale.email(string, obligatoire) : adresse e-mail de l'utilisateurexp(number, obligatoire) : horodatage d'expiration du jetoniat(number, obligatoire) : horodatage d'émission du jeton
Claims facultatifs :
name(string, facultatif) : nom d'affichagecustomAttributes(object, facultatif) : attributs utilisateur supplémentaires. Vous pouvez également utilisermetadata; les deux clés sont acceptées.
Le claim sub doit rester stable pour chaque utilisateur. Ferndesk utilise ce sujet pour identifier et associer les utilisateurs. Si le sub d'un utilisateur change, celui-ci ne sera pas associé à son identité précédente dans le centre d'aide.
Exemple Node.js :
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 + 900, // 15 minutes (maximum token age)
customAttributes: { plan: req.user.plan }
}, process.env.FERNDESK_JWT_SECRET, { algorithm: 'HS256' });
res.send(token);
});Exemple Python :
import jwt
import os\nimport 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 + 900, # 15 minutes (maximum token age)
'customAttributes': {'plan': current_user.plan}
}, os.environ['FERNDESK_JWT_SECRET'], algorithm='HS256')
return tokenN'exposez jamais votre secret JWT dans du code côté client. Stockez-le uniquement dans des variables d'environnement côté serveur.
Appeler Identify depuis votre frontend
Récupérez le jeton depuis votre backend et transmettez-le au 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));Exemple React :
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]);Appelez identify après init, mais avant d'ouvrir le widget. Pour déconnecter un utilisateur, appelez POST /api/auth/logout. Réinitialisez uniquement pour réinitialiser l'état local du widget.
Vérifier le fonctionnement
Vérifiez les indicateurs suivants :
Console du navigateur : aucune erreur. Les JWT non valides affichent
Ferndesk: identify failed (Invalid or expired token).Formulaire de contact : l'adresse e-mail et le nom seront préremplis
Analytics : les sessions utilisateur apparaissent dans votre tableau de bord
Erreurs courantes
Ferndesk: identify requires a jwt
Paramètre jwt manquant. Vérifiez que votre backend renvoie une chaîne JWT.
invalid jwt
La vérification de la signature ou la validation des claims a échoué. Vérifiez les éléments suivants :
Le secret JWT correct correspond à celui enregistré dans Ferndesk
Le jeton n'a pas expiré
L'algorithme est HS256
Les claims obligatoires sont présents :
sub,email,expetiat
Le sujet JWT ne correspond pas à l'utilisateur existant du centre d'aide
Cette erreur se produit lorsque l'adresse e-mail d'un utilisateur existe déjà dans votre centre d'aide, mais avec un autre identifiant de sujet. Cela signifie qu'une personne s'est précédemment connectée avec cette adresse e-mail en utilisant un autre système d'identité ou une autre valeur sub.
Pour résoudre ce problème :
Vérifiez que votre backend envoie toujours le même
subpour chaque utilisateurSi vous avez modifié vos systèmes d'identifiants utilisateur, l'utilisateur concerné devra être reprovisionné dans Ferndesk
doit être appelé depuis le même domaine ou un sous-domaine de niveau 1
Les origines ne correspondent pas. Les requêtes ultérieures de session du widget doivent provenir exactement de l'origine ayant effectué l'identification, avec le même schéma, le même hôte et le même port.
Le claim sub est l'identifiant principal des utilisateurs. Bien que email soit obligatoire, Ferndesk lie l'identité au sujet, et non à la seule adresse e-mail. Cela empêche la prise de contrôle d'un compte lorsque les adresses e-mail changent ou sont réutilisées.
Notes de sécurité
Définissez l'expiration du jeton à 15 minutes ou moins
Générez des jetons uniquement pour les utilisateurs authentifiés
Utilisez HTTPS partout
N'intégrez jamais de secrets dans le contrôle de version
Conservez des valeurs
substables. Ferndesk conserve l'identité en fonction du sujet.