Les jetons d'installation des GitHub App sont désormais des JWT de 520 caractères
GitHub a terminé le 2 octobre le passage des jetons d'installation des GitHub App à un format sans état. Ils font désormais environ 520 caractères, contre 40, et d'anciennes vérifications peuvent échouer.
3 min de lecture

En chiffres
- characters in the old installation token
- 40
- characters in the new stateless token
- ~520
- when the opt-out header is deprecated
- Nov 30
GitHub a terminé de faire passer tous les jetons d'installation de GitHub App nouvellement créés à un nouveau format « sans état » (stateless), a indiqué l'entreprise dans son changelog le 2 octobre 2026. Les jetons commencent toujours par ghs_, mais ils font désormais environ 520 caractères au lieu de 40. Tout code qui supposait l'ancienne longueur, comme un motif de validation ou une colonne de base de données, peut maintenant rejeter ou tronquer un jeton qui fonctionne.
Ce qui a changé
Un jeton d'installation est le mot de passe de courte durée qu'une GitHub App utilise pour agir sur les dépôts où elle est installée. GitHub a lancé un déploiement progressif du nouveau format le 27 avril 2026. Le changelog du 2 octobre indique que ce déploiement est terminé, donc le nouveau format est désormais celui par défaut.
Le nouveau jeton est un JWT, pour JSON Web Token : une chaîne signée qui transporte des informations en elle-même. Selon le changelog de mai de GitHub, on peut distinguer les deux formats en comptant les points. Un jeton sans état contient deux points, alors que l'ancien jeton opaque n'en contient aucun.
| Ancien format | Nouveau format | |
|---|---|---|
| Préfixe | ghs_ | ghs_ |
| Longueur | 40 caractères, fixe | environ 520 caractères, variable |
| Points dans le jeton | 0 | 2 |
| Durée de vie | 1 heure | 1 heure, inchangée |
Les permissions, le périmètre des dépôts et l'expiration d'une heure restent identiques, selon GitHub. Seule la forme de la chaîne a changé.
Ce que contient le jeton
Le projet Kingfisher de MongoDB, un scanner qui traque les secrets ayant fuité, a décrit le format dans une issue ouverte le 26 avril. Il écrit le motif sous la forme ghs_APPID_JWT. Selon l'issue, la partie JWT contient des détails comme l'installation cible et l'application, ainsi que des données de validation de base.
Ce JWT est signé par l'émetteur interne de GitHub. L'issue de Kingfisher indique que les applications clientes ne doivent pas essayer de le valider. Pour votre code, le jeton doit rester une chaîne opaque : quelque chose que vous stockez et envoyez, sans jamais l'analyser.
Kingfisher a aussi signalé que sa propre règle de détection de ces jetons devrait être mise à jour une fois le déploiement terminé. Les scanners de secrets qui recherchent l'ancienne forme à 40 caractères sont l'un des premiers endroits où ce changement se manifeste.
L'en-tête de contournement et son échéance
En mai, GitHub a ajouté un en-tête temporaire, X-GitHub-Stateless-S2S-Token, à la requête qui crée un jeton d'installation. Envoyer enabled renvoie un jeton au nouveau format. Envoyer disabled renvoie un jeton à l'ancien format, même pour les applications déjà migrées. Sans l'en-tête, le comportement par défaut s'applique.
Cette porte de sortie se referme. Le changelog du 2 octobre indique que l'en-tête sera déprécié le 30 novembre 2026. Après cette date, les équipes qui ont figé l'ancien format pour gagner du temps perdront cette option.
Le changelog de mai de GitHub indique que GitHub Enterprise Cloud et ses régions de résidence des données sont concernés. Il cite aussi le GITHUB_TOKEN d'Actions, le jeton qu'utilisent les workflows, aux côtés des jetons d'App serveur à serveur.
Ce que cela signifie pour les développeurs
Cherchez dans votre code tout ce qui traite ces jetons comme s'ils avaient une taille fixe. Les recommandations de GitHub citent quatre points sensibles : les contrôles de longueur, les limites de colonnes en base de données, la troncature des en-têtes et les motifs de journalisation. Chacun peut échouer sans bruit. Une colonne de 40 ou 255 caractères tronquera le jeton, et l'appel d'API échouera ensuite avec ce qui ressemble à une erreur d'authentification.
Corrigez ensuite les motifs de validation. Un motif comme ghs_[A-Za-z0-9]{36} rejette le nouveau jeton, car celui-ci est plus long et contient des points. Le changelog de mai de GitHub suggère ghs_[A-Za-z0-9.\-_]{36,}, qui accepte les deux formats. Testez votre propre motif sur un exemple inventé de chaque forme dans un testeur d'expressions régulières, jamais sur un jeton réel.
Assurez-vous que le stockage accepte au moins 520 caractères, indique GitHub. Cela inclut les caches, les coffres à secrets et les variables d'environnement soumises à une limite de taille. Si vous masquez les secrets dans les journaux, vérifiez que ce masquage attrape toujours le jeton plus long. Sinon, une partie d'un identifiant valide pourrait se retrouver en clair.
Si vous avez réglé l'en-tête de contournement sur disabled ce printemps, vous avez jusqu'au 30 novembre pour le retirer. Testez d'abord avec enabled, puis supprimez l'en-tête.
Sources
- Stateless GitHub App installation tokens rolled out - GitHub Changelog
- GitHub App installation tokens: Per-request override header - GitHub Changelog
- Upcoming changes to GitHub App installation tokens format - MongoDB Kingfisher on GitHub
- Generating an installation access token for a GitHub App - GitHub Docs
Articles liés

HTTP QUERY a sa RFC, mais presque aucune implémentation
La RFC 10008 a donné à HTTP une méthode QUERY en juin 2026 : sûre et idempotente comme GET, avec un corps de requête comme POST. Presque rien ne l'implémente encore.

Le FBI enquête sur une affirmation du dark web : 153 M de permis scannés fuités
Une annonce sur le dark web prétend détenir 153 millions de permis d'IDScan.net, une API de vérification d'identité intégrée dans des applications. Le FBI enquête ; IDScan.net n'a rien confirmé.

Un malware caché dans un hook git post-checkout cible les développeurs
Le développeur Frank Wiles dit qu'un faux client lui a envoyé un dépôt dont le hook git post-checkout téléchargeait un malware au changement de branche. Les candidats à l'emploi subissent la même ruse.