Vérification d’identité (Identity Verification)

Identity Verification (IV) empêche un attaquant d'usurper l'identité d'un autre utilisateur dans le widget Klarodesk. Il s'agit d'une signature HMAC-SHA256 calculée côté serveur chez vous, injectée dans le widget et vérifiée par Klarodesk.

Pourquoi l'activer

  • Empêche un utilisateur anonyme de poser des questions au nom de [email protected].
  • Requis si vos utilisateurs sont authentifiés chez vous (B2B, portail client, SaaS interne).
  • Recommandé par les standards actuels (Intercom Identity Verification, Zendesk JWT).

Activer l'IV (tableau de bord)

  1. Dans le tableau de bord Klarodesk, ouvrez Canaux — Votre widget — Identity Verification.
  2. Activez l'interrupteur.
  3. Cliquez sur Générer un nouveau secret. Copiez la valeur affichée : elle ne sera plus jamais montrée.
  4. Enregistrez la valeur dans les variables d'environnement de votre backend (ex. : KLARO_IV_SECRET).

Intégration côté serveur

Node.js (Express, Next.js, etc.)

const crypto = require("crypto");

function generateUserHash(email) {
  return crypto
    .createHmac("sha256", process.env.KLARO_IV_SECRET)
    .update(email.toLowerCase())
    .digest("hex");
}

// In your page handler:
const user = req.session.user;
const userHash = generateUserHash(user.email);

res.render("page", {
  klaroSettings: {
    user: { email: user.email, name: user.name, userHash: userHash },
  },
});

Python (Django, Flask)

import hmac, hashlib, os

def generate_user_hash(email: str) -> str:
    secret = os.environ["KLARO_IV_SECRET"].encode()
    return hmac.new(secret, email.lower().encode(), hashlib.sha256).hexdigest()

# In your view:
user_hash = generate_user_hash(request.user.email)
context = {
    "klaro_settings": {
        "user": {"email": request.user.email, "name": request.user.name, "userHash": user_hash},
    }
}

Ruby on Rails

require 'openssl'

def generate_user_hash(email)
  OpenSSL::HMAC.hexdigest("sha256", ENV["KLARO_IV_SECRET"], email.downcase)
end

# In your controller:
@klaro_settings = {
  user: { email: current_user.email, name: current_user.name, userHash: generate_user_hash(current_user.email) }
}

PHP

<?php
function generate_user_hash($email) {
  return hash_hmac("sha256", strtolower($email), getenv("KLARO_IV_SECRET"));
}

$klaroSettings = [
  "user" => [
    "email" => $user->email,
    "name" => $user->name,
    "userHash" => generate_user_hash($user->email),
  ],
];

Injection dans la page HTML

<script>
  window.klaroSettings = {{ klaroSettings | json }};
</script>
<!-- Code d'installation copié depuis Réglages > Canaux > Widget -->
<script src="https://app.klarodesk.com/api/widget/VOTRE_CANAL/widget.js"></script>

Rotation du secret

Si votre secret est compromis, cliquez à nouveau sur Générer un nouveau secret dans le tableau de bord. Tous les userHash calculés avec l'ancien secret seront rejetés. Vos utilisateurs authentifiés reçoivent automatiquement un nouveau hash au prochain chargement de page (calculé par votre backend).

Modèle de sécurité

  • Le secret ne quitte JAMAIS votre backend. Il n'est ni dans le HTML ni dans les cookies.
  • Le userHash est une preuve non répudiable que c'est VOUS qui avez émis ce couple (email, session).
  • Klarodesk vérifie la signature en temps constant (timing-safe), ce qui résiste aux attaques temporelles.
  • Un attaquant XSS sur votre site peut exfiltrer UN userHash, pas tous. Rotation recommandée en cas d'incident.

Échecs et débogage

  • Si userHash est absent alors que l'IV est activée : 400 identity_verification_required.
  • Si userHash ne correspond pas : 403 identity_verification_failed. Journalisé côté Klarodesk.
  • Après 5 échecs par minute depuis une même IP, blocage pendant 1 h.
  • À vérifier : l'email est mis en minuscules AVANT le HMAC. Le secret est identique à celui du serveur Klarodesk (faites une rotation en cas de doute).

Support

Des questions ou un problème d'intégration ? Contactez [email protected].