2.c) SSO - Signature JWT (JSON Web Token)

Ce mode d'authentification permet de connecter automatiquement les utilisateurs à Logora une fois qu'il sont authentifiés à travers votre système de connexion. Cette méthode utilise un jeton JWT (JSON Web Token) par votre clé secrète pour transmettre les données de l'utilisateur à Logora.


Comment fonctionne le processus de connexion ? 


Avant de commencerrendez-vous sur votre Espace d'administration > Paramètres > Authentification et choisissez le mode d'authentification Signature JWT.


1. Lorsque l'utilisateur se connecte sur votre site web; vous devez créer jeton JWT contenant les informations de l'utilisateur. Il sera transmis à Logora. 


2. Lorsque l'utilisateur se rend sur une page où est inséré le code Logora, le jeton JWT est inséré dans les variables de configuration Javascript, via le paramètre remote_auth.


3. L'application Logora détecte le jeton JWT, le décode, le vérifie et inscrit ou connecte l'utilisateur.


Pour implémenter cette méthode, il faut vous munir de la clé secrète disponible dans votre espace d'administration à l'onglet Paramètres > Général.

Cette clé secrète vous servira à créer le jeton JWT. Elle doit rester confidentielle. 


ATTENTION : le jeton JWT transmis à Logora doit toujours être mis à jour selon l'état de l'utilisateur, qu'il soit connecté ou non. Si les pages de votre site web sont derrière un cache, notamment les pages qui contiennent la synthèse du débat, il est possible que le jeton JWT ne soit pas mis à jour. Si la mise en cache gêne la création du jeton JWT, utilisez une autre méthode d'authentification.


Comment générer votre jeton JWT ? 

Grâce à la sérialisation JSON Web Token, les éditeurs peuvent transmettre les données utilisateurs existantes pour fournir aux utilisateurs une session authentifiée transparente sur Logora. Le jeton JWT doit être généré sur vos serveurs puis transmis à Logora via les variables de configuration javascript. Voici la composition du jeton, constitué des trois parties suivantes :


1. Le header du jeton :


Header: 
{ 
  "alg": "HS256", 
  "typ": "JWT" 
}


2. Le corps du jeton


Il doit inclure les attributs suivants, sensibles à la casse :

  • uid : identifiant unique associé à l'utilisateur dans votre base de données.
  • first_name : prénom de l'utilisateur, ou nom d'utilisateur si last_name est vide.
  • last_name (optionnel) : nom de famille de l'utilisateur.
  • email : l'adresse email enregistrée pour ce compte.
  • avatar (optionnel) : lien vers l'avatar de l'utilisateur.
  • iat : date de génération du jeton JWT

 

Payload:
{
  "uid": "12345abc",
  "email": "jean@logora.fr",
  "first_name": "Jean",
  "last_name": "Dupont",
  "iat": 1516239022
}


3. La signature


Signature :
HMACSHA256(
   base64UrlEncode(header) + "." +
   base64UrlEncode(payload),
   SECRET_KEY
)


Exemple de pseudo-code standard :


header = { 
  "alg": "HS256", 
  "typ": "JWT" 
}

payload = {
  uid: "123abc",
  first_name: "Jean",
  last_name: "Dupont",
  email: "jeandupont@exemple.com",
  iat: 1516239022
}

signature = HMACSHA256(
   base64UrlEncode(header) + "." +
   base64UrlEncode(payload),
   SECRET_KEY
)

// Variable transmise à Logora
jetonJWT = base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + signature

// Exemple de jeton JWT
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiIxMjNhYmMiLCJmaXJzdF9uYW1lIjoiSmVhbiIsImxhc3RfbmFtZSI6IkR1cG9udCIsImVtYWlsIjoiamVhbmR1cG9udEBleGVtcGxlLmNvbSIsImlhdCI6MTUxNjIzOTAyMn0.ITnJo8VwbP4PkVTANSt651C0olsrdRNCNmvTHkanuYk"


Comment transmettre votre jeton JWT ? 


Une fois que le message a été généré, il doit être transmis via la variable de configuration Javascript, remote_auth, dans le code de la synthèse et de l'espace de débat.


var logora_config = {
        remote_auth: jeton_JWT
}


Déconnexion de l'utilisateur


Pour déconnecter l'utilisateur, retirez le paramètre remote_auth ou transmettez une chaîne de caractères vide. Si le paramètre est vide, Logora considère que l'utilisateur est déconnecté.

Redirection vers l'espace de débat après connexion de l'utilisateur


Lorsqu'un utilisateur non connecté veut effectuer une action sur l'espace de débat, il est redirigé vers votre page de connexion ou d'inscription. Lors de l'insertion de l'espace de débat et de la synthèse, vous devez définir les URLs de connexion et d'inscription, respectivement via les variables auth.login_url et auth.registration_url.


 Lors de la redirection, un paramètre de requête logora_redirect est transmis, contenant l'URL de la page avant redirection. Utilisez ce paramètre pour rediriger l'utilisateur après sa connexion ou son inscription. Le nom du paramètre transmis peut être modifié, il peut être par exemple défini à redirect_to. Pour changer le nom du paramètre, utilisez la variable auth.redirectParameter.


var logora_config = {
    remote_auth: jeton_JWT,
    auth: {
        login_url: "Votre URL de connexion",
        registration_url: "Votre URL d'inscription",
        redirectParameter: "redirectTo"
}




Suivez ces prochaines étapes pour terminer l'installation et lancer votre premier débat :