Skip to content

Générer un token JWT pour Mercure avec jwt.io ​

Configuration de jwt.io ​

  • Copier la clé secrète de Mercure subscriber_jwt et/ou publisher_jwt dans le champ VERIFY SIGNATURE et la clé secrète de Mercure dans le champ VERIFY SIGNATURE dans 'input your-256-bit-secret'

🚩 Regarder ma page de doc sur Installer Mercure parce que les varibales sont définis dans :

shell
sudo nano /etc/environment

C'est bien ces clés là qu'il faut copier dans jwt.io pour générer un token JWT valide pour mon installation de Mercure.

  • Dans le champ PAYLOAD ajouter les claims sous forme de JSON - au minimum il faut ajouter les claims mercure avec les droits publish et subscribe pour que le token soit valide pour Mercure :
json
{
  "mercure": {
    "publish": ["*"],
    "subscribe": ["*"]
  }
}
  • Copier le token JWT généré dans la partie Encoded et le coller dans le body de la requête POST pour Mercure
  • Utiliser ce token JWT pour les requêtes POST sur l'url de Mercure

Exemple d'un token aec des autorisation limité à un groupe de route derrière /admin ​

json
{
  "mercure": {
    "publish": ["https://mondomaine.ext/admin/*"],
    "subscribe": ["https://mondomaine.ext/admin/*"]
  }
}

Sécurité ​

Pour la production il faut bien sûr générer un token JWT avec des droits plus restreints pour la sécurité et aussi un CaddyFile.dev plus sécurisé nottament en générant une publisher_jwtet une subscriber_jwt différente de la clé par défaut !ChangeThisMercureHubJWTSecretKey!.

Je peux générer des publisher_jwt et subscriber_jwt sécurisée avec la commande suivante :

shell
openssl rand -base64 64

ça donne un résultat comme celui-ci :

shell
kQcRTUoPdd8SRc1jPlDMBNOkuS8bmEXQLUCsnIZU61xsiVNwuv9xgp0JeLmRHdmPuYuoDzl3QDtSJd1Sn+Pe8w==

Remplacer la clé par défaut par la clé générée dans le fichier où j'ai stocké les variables d'environnement globales :

shell
sudo nano /etc/environment
shell
MERCURE_PUBLISHER_JWT_KEY=kQcRTUoPdd8SRc1jPlDMBNOkuS8bmEXQLUCsnIZU61xsiVNwuv9xgp0JeLmRHdmPuYuoDzl3QDtSJd1Sn+Pe8w==
MERCURE_SUBSCRIBER_JWT_KEY=kQcRTUoPdd8SRc1jPlDMBNOkuS8bmEXQLUCsnIZU61xsiVNwuv9xgp0JeLmRHdmPuYuoDzl3QDtSJd1Sn+Pe8w==

Sauver et quitter le fichier.

Il fadra générer un nouveau token JWT avec jwt.io pour tester les nouvelles clés et donc mettre à jour le champ input your-256-bit-secret avec la nouvelle clé générée et déclarée dans le fichier Caddyfile.dev pour tester les nouvelles clés.

Conclusion ​

C'st terminé il faut veiller à générer des Token JWT signés correctement avec les bonnes clés récupérées dans les variables d'environnement pour sécuriser l'accès à Mercure et si je change les clés il faudra bien sûr générer un nouveau token JWT avec les nouvelles clés pour que Mercure fonctionne correctement.