Saasy

Authentification SSO

Identifie automatiquement tes utilisateurs dans le widget Saasy.

Authentification SSO

Le SSO (Single Sign-On) de Saasy te permet d'identifier automatiquement tes utilisateurs dans le widget sans qu'ils aient à se reconnecter. C'est la méthode d'identification recommandée pour toute application SaaS qui dispose déjà d'un système de comptes.

Pourquoi utiliser le SSO

Par défaut, le widget Saasy propose deux modes d'identification basiques :

  • Invite (Guest) : l'utilisateur saisit manuellement son email et son nom avant de soumettre du feedback. L'identité n'est pas garantie — n'importe qui peut entrer n'importe quelle adresse.
  • Anonyme : aucune identification, le feedback est complètement anonyme. Simple, mais tu perds toute possibilité de suivi.

Avec le SSO, tu contournes ces limitations :

  • Identité vérifiée — tu contrôles les données transmises au widget depuis ton serveur. L'utilisateur n'a rien à saisir.
  • Suivi des votes — les votes sont associés à un compte réel, ce qui évite la fraude et les doublons.
  • Personnalisation — tu peux passer des attributs (plan, role, entreprise) qui te permettront de filtrer le feedback et de cibler tes sondages avec précision.
  • Expérience utilisateur transparente — le widget connaît déjà l'utilisateur. Le friction est zéro.

Comment ca marche

Le flux SSO de Saasy repose sur un JWT (JSON Web Token) signé côté serveur :

  1. Lorsqu'un utilisateur charge ton application, ton serveur génère un JWT signé avec ta SSO Key.
  2. Ce token est passé au widget via la configuration window.SaasyConfig.
  3. Quand le widget s'initialise, il envoie le token à l'API Saasy.
  4. L'API Saasy vérifie la signature et identifie l'utilisateur en créant ou mettant à jour son profil.
  5. La session est établie — l'utilisateur est reconnu dans tous les modules du widget.

Le token expire après une heure. Si l'utilisateur garde l'onglet ouvert longtemps, le widget recharge automatiquement la configuration au moment de la prochaine interaction.

Sécurité du token

Ne génère jamais le token côté client. Ta SSO Key ne doit jamais être exposée dans le code front-end. Génère toujours le JWT dans une route serveur protégée et transmets-le au front lors du chargement de la page ou de la session.

Récupérer ta SSO Key

  1. Connecte-toi à ton tableau de bord Saasy.
  2. Sélectionne l'application concernée.
  3. Va dans Paramètres > SSO.
  4. Copie la valeur du champ SSO Key.

Si tu n'as pas encore activé le SSO pour cette application, clique sur Activer le SSO sur cette même page. Saasy génère alors une clé unique pour ton application.

Clé secrète

Traite ta SSO Key comme un mot de passe. Ne la commite jamais dans ton dépôt Git et ne l'expose jamais dans le code front-end. Stocke-la dans une variable d'environnement côté serveur.

Générer un JWT côté serveur

Voici comment signer le token dans les langages les plus courants. Dans tous les cas, utilise ta SSO Key comme secret de signature et fixe une expiration à une heure.

Installe la dépendance :

npm install jsonwebtoken

Puis génère le token dans ta route serveur :

const jwt = require('jsonwebtoken');

const ssoToken = jwt.sign({
  externalId: user.id,
  email: user.email,
  name: user.name,
  avatar: user.avatarUrl,
  attributes: {
    plan: user.plan,
    role: user.role,
  },
  companies: [
    {
      name: user.company.name,
      externalId: user.company.id,
      plan: user.company.plan,
      monthlySpend: user.company.mrr,
    },
  ],
}, process.env.SAASY_SSO_KEY, { expiresIn: '1h' });

Transmets ensuite ssoToken à ton front-end (via une variable de template, une réponse JSON initiale ou un cookie HTTP-only).

Passer le token au widget

Une fois le token généré et transmis à ton front-end, passe-le dans la configuration du widget via le champ ssoToken :

<script>
  window.SaasyConfig = {
    embedKey: "TON_EMBED_KEY",
    appKey: "TON_APP_KEY",
    ssoToken: "LE_TOKEN_GENERE_PAR_TON_SERVEUR",
  };
</script>
<script
  src="https://cdn.saasy.fr/widget.js"
  async
  defer
></script>

Si tu utilises React ou un autre framework avec rendu serveur (Next.js, Remix, Nuxt), tu peux injecter le token directement dans ta page :

// Exemple Next.js — pages/_app.tsx ou app/layout.tsx
window.SaasyConfig = {
  embedKey: process.env.NEXT_PUBLIC_SAASY_EMBED_KEY,
  appKey: process.env.NEXT_PUBLIC_SAASY_APP_KEY,
  ssoToken: props.ssoToken, // passe depuis getServerSideProps ou un Server Component
};

Détail du payload JWT

Voici la liste complète des champs acceptés dans le payload du token :

ChampTypeRequisDescription
externalIdstringOuiL'identifiant unique de l'utilisateur dans ton système. Sert de clé de rapprochement dans Saasy.
emailstringOuiL'adresse email de l'utilisateur. Utilisée pour les notifications et l'affichage dans le dashboard.
namestringOuiLe nom complet de l'utilisateur, tel qu'il apparaîtra dans le widget et le dashboard.
avatarstringNonURL vers l'image de profil de l'utilisateur. Doit être une URL publiquement accessible.
attributesobjectNonObjet libre de clés/valeurs pour stocker des attributs métier (plan, role, date d'inscription, etc.). Utilisable dans les filtres de segmentation.
companiesarrayNonListe des entreprises auxquelles appartient l'utilisateur. Utilise le format objet ([{ externalId, name, domain }]) pour que Saasy cree automatiquement l'entreprise. Le format string (["ext_id"]) ne permet que le rattachement a une entreprise existante. En mode Entreprises et users du Client Portal, le premier element est utilise pour creer/rattacher automatiquement l'utilisateur a l'entreprise.

Structure d'un objet entreprise

ChampTypeRequisDescription
externalIdstringOuiIdentifiant unique de l'entreprise dans ton système.
namestringOuiNom de l'entreprise. Requis pour la création automatique dans Saasy.
domainstringNonDomaine de l'entreprise (ex: acme.com).
planstringNonPlan souscrit par l'entreprise.
monthlySpendnumberNonRevenu mensuel généré par cette entreprise (MRR), en valeur numérique.

Dépannage

Signature invalide

Si le widget retourne une erreur invalid_signature, cela signifie que le token n'a pas été signé avec la bonne SSO Key. Vérifie que :

  • Tu utilises bien la SSO Key de l'application concernée (et non une clé d'une autre application).
  • La variable d'environnement SAASY_SSO_KEY est correctement définie dans ton environnement de production.
  • Tu n'as pas de caractère parasite (espace, retour à la ligne) dans la valeur de la clé.

Piège courant

Si tu copies la SSO Key depuis le dashboard et que tu la colles dans un fichier .env, assure-toi qu'il n'y a pas d'espace avant ou après la valeur. Un espace invisible suffit à invalider la signature.

Token expiré

Le token a une durée de vie d'une heure (expiresIn: '1h'). Si tu vois une erreur token_expired, c'est que le token a été généré il y a plus d'une heure avant d'être utilisé. Génère toujours le token au moment du chargement de la session ou de la page, jamais à l'avance dans un cron ou une cache de longue durée.

Champs manquants

Les champs externalId, email et name sont obligatoires. Si l'un d'eux est absent, le widget refusera le token et l'erreur missing_required_fields sera remontée dans la console. Vérifie que l'objet utilisateur que tu passes au moment du jwt.sign() contient bien ces trois valeurs et qu'elles ne sont pas null ou undefined.

Utilisateurs non connectés

N'active pas le SSO pour les visiteurs non authentifiés de ton application. Si un utilisateur n'est pas connecté, omets simplement le champ ssoToken dans window.SaasyConfig. Le widget basculera automatiquement sur le mode invite ou anonyme selon ta configuration.