Générer un token JWT pour Mercure avec jwt.io
- Aller sur le site jwt.io
Configuration de jwt.io
- Copier la clé secrète de Mercure
subscriber_jwtet/oupublisher_jwtdans le champVERIFY SIGNATUREet la clé secrète de Mercure dans le champVERIFY SIGNATUREdans 'inputyour-256-bit-secret'
🚩 Regarder ma page de doc sur Installer Mercure parce que les varibales sont définis dans :
sudo nano /etc/environmentC'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
PAYLOADajouter les claims sous forme de JSON - au minimum il faut ajouter les claimsmercureavec les droitspublishetsubscribepour que le token soit valide pour Mercure :
{
"mercure": {
"publish": ["*"],
"subscribe": ["*"]
}
}- Copier le token JWT généré dans la partie
Encodedet 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
{
"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 :
openssl rand -base64 64ça donne un résultat comme celui-ci :
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 :
sudo nano /etc/environmentMERCURE_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.