Cette page t'a-t-elle aidé ?

Cette page t'a-t-elle aidé ?
Référence
Pour authentifier les utilisateurs de votre app auprès de Gilbert, vous signez un JWT côté backend avec un secret partagé. Algo HS256, durée de vie courte. Le token est passé à l'iframe via ?token=…
Dernière mise à jour : 7 mai 2026
Le payload du JWT doit contenir ces claims (les noms suivent la convention RFC 7519) :
{
"iss": "votre-tenant", // votre tenant_id
"aud": "gilbert", // toujours "gilbert"
"product_context": "votre-tenant",
"sub": "user-uuid-or-null", // null pour mode guest authentifié
"email": "user@example.com", // optionnel mais recommandé
"guest": false,
"iat": 1735000000, // issued-at, secondes Unix
"exp": 1735000600 // iat + 600s recommandé
}Trois exemples équivalents. Choisissez votre stack : l'essentiel est que le secret reste côté serveur.
import jwt from 'jsonwebtoken'
const SECRET = process.env.GILBERT_SSO_SECRET // partagé avec Gilbert
const ISS = 'votre-tenant'
export function signGilbertToken(user) {
const now = Math.floor(Date.now() / 1000)
return jwt.sign(
{
iss: ISS,
aud: 'gilbert',
product_context: 'votre-tenant',
sub: user.id,
email: user.email,
guest: false,
iat: now,
exp: now + 600, // 10 minutes
},
SECRET,
{ algorithm: 'HS256' },
)
}Recommandation : TTL de 5 à 15 minutes. Plus court = plus sûr (un token volé expire vite). Plus long = moins d'allers-retours serveur.
Implémentez une route GET /api/gilbert-tokencôté votre backend. L'iframe Gilbert poll cet endpoint quand son token approche de l'expiration (à 80% du TTL) et le swap in-place sans interruption de session.
import { NextResponse } from 'next/server'
import { getCurrentUser } from '@/lib/auth'
import { signGilbertToken } from '@/lib/gilbert'
export async function GET() {
const user = await getCurrentUser()
if (!user) {
return NextResponse.json({ error: 'unauthenticated' }, { status: 401 })
}
return NextResponse.json({ token: signGilbertToken(user) })
}Décodez le payload d'un token sans appel réseau. La vérif de signature n'est pas effectuée ici : elle est faite côté Gilbert quand le token est consommé.
Live tester
Colle un token signé pour décoder le payload. La vérif de signature nécessite ton secret côté backend : non testée ici.
exp est dans le passé. Vérifiez la clock skew entre votre serveur et Gilbert (Gilbert tolère 30s de drift).aud doit valoir exactement "gilbert".iss ne correspond pas à votre tenant enregistré côté Gilbert.