
Partager:
Lorna est une ingénieure en informatique qui a la manie incurable de bloguer. Elle tente d'apprivoiser les mots et le code à parts égales.
Utilisation de clés privées dans les variables d'environnement
Temps de lecture : 5 minutes
Cet article a été mis à jour en mars 2025
Beaucoup de nos nouvelles API utilisent des JWT (JSON Web Tokens) pour l'authentification, ce qui est très bien. Cependant, comme nos JWT sont signés avec des clés privées et que celles-ci contiennent des nouvelles lignes, cela peut parfois faire échouer certaines de nos approches habituelles de la gestion des informations d'identification !
Ce billet montre comment utiliser une clé privée dans une variable d'environnement, et donne un exemple en action avec l'API Voice de Vonage et une fonction Netlify.
Vonage API Account
To complete this tutorial, you will need a Vonage API account. If you don’t have one already, you can sign up today and start building with free credit. Once you have an account, you can find your API Key and API Secret at the top of the Vonage API Dashboard.
Créez ensuite une application dotée de capacités Voice ; vous aurez besoin de l'identifiant de l'application et du fichier de clé privée pour l'étape suivante.
Vous pouvez utiliser votre tableau de bord de votre Account pour cette partie, ou vous pouvez utiliser l'interface de programmation comme ceci :
vonage apps create privateLa commande imprime l'identifiant de l'application et écrit la clé privée dans le fichier imaginairement nommé private.key au nom imagé de "fichier". Ces deux éléments sont utilisés dans l'étape suivante.
Pourquoi ne pas simplement télécharger le fichier ?
Les données se trouvent dans private.keyn'est-ce pas ? Pourquoi ne pouvons-nous pas utiliser ce fichier que nous avons sur le disque ?
Pour une application locale, c'est tout à fait possible et vous verrez que beaucoup de nos exemples d'applications le font.
Pour une "vraie" application, cependant, le fichier private.key ne fait pas partie de l'application et ne peut pas être traité de la même manière que les autres fichiers.
A private.key ne doit jamais être ajouté au contrôle des sources ; il s'agit d'un identifiant secret au même titre que le mot de passe de votre Account. Il est également probable que différents jeux d'identifiants seront utilisés avec cette application sur différentes plateformes, comme votre plateforme de développement locale, ou lorsque l'application est déployée sur une plateforme de mise à disposition ou une plateforme live.
Dans cette optique, j'ai besoin d'un moyen de gérer cette clé privée sous la forme d'une chaîne de caractères en toute sécurité d'une autre manière.
Créer une application de base pour les appels Voice
Une excellente façon de voir cela en action est de créer une application qui utilise l'API Voice. Je pense que je ne me lasserai jamais de faire sonner mon téléphone par programmation !
L'exemple d'aujourd'hui utilise Node.js et passe un appel téléphonique avec une simple annonce de synthèse vocale.
Avant d'écrire le code, j'installerai le SDK Node de Vonage de Vonage :
Il est temps de passer au code ! Pour une application aussi simple, j'ai l'habitude de mettre l'ensemble dans index.jsquelque chose comme ça :
const Vonage = require('@vonage/server-sdk');
const vonage = new Vonage({
applicationId: process.env.VONAGE_APPLICATION_ID,
privateKey: Buffer.from(process.env.VONAGE_APPLICATION_PRIVATE_KEY64, 'base64')
})
vonage.calls.create({
to: [{
type: 'phone',
number: process.env.TO_NUMBER
}],
from: {
type: 'phone',
number: process.env.VONAGE_NUMBER
},
ncco: [{
"action": "talk",
"text": "Safely handling environment variables makes coding even more fun."
}]
}, (error, response) => {
if (error) console.error(error)
if (response) console.log(response)
})
Jetez un coup d'œil à l'exemple de code, et vous constaterez qu'il y a plusieurs endroits où il est fait référence à des variables d'environnement avec la mention process.env.*.
L'utilisation de variables d'environnement est un excellent moyen de créer un code qui fonctionnera sans problème à plusieurs endroits, car dans chaque scénario, il se contentera de rechercher et d'utiliser les valeurs fournies.
En particulier, je préfère l'environnement aux fichiers de configuration pour les plateformes en nuage, où je peux déployer à partir du contrôle de la source, mais où je n'inclurais jamais d'informations d'identification.
Pour les plates-formes locales, j'utilise dotenv pour charger les variables d'environnement depuis un fichier de configuration. Lors de l'utilisation de dotenv, ou pour certaines plateformes cloud telles que Netlify et Glitch, il n'est pas possible d'utiliser des valeurs multilignes pour une variable d'environnement. Pour contourner ce problème, j'utilise des valeurs encodées en base64 pour mes variables d'environnement et je demande à mon application de décoder les valeurs avant de les utiliser.
Préparation des variables d'environnement
Pour une utilisation locale de dotenvou pour une plateforme qui ne gère pas les variables d'environnement multilignes, je prépare un fichier .env comme suit :
TO_NUMBER=44777000777
VONAGE_NUMBER=44777000888
VONAGE_APPLICATION_ID=abcd1234-aaaa-bbbb-cccc-0987654321ef
VONAGE_APPLICATION_PRIVATE_KEY64=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ25VaFp3N214cTljZHUKU21oL1UrekovdGRZSUxRVDF5VExjWnFETk11OW44WUVHMmMyR1JUbmR2a2cxeXlBVCtqTk45Zmp5eTg1Zi9EOG9zTzhPdnhRS0Y0aWpoblJlVTVDQStnU0o3UEhLa3U5YjJsMzZ2TmN5WFFCdWRJVk8KV2tBOERraTlFVHpqaG8rRnh0SGJuWGZHa3o3emtzUTJvMjVMemorblFkendCQlc3aXVrNVNqdkdYSkFEK0xQRUIveHhUVEhSRFZJRjNxYWM2dmM5L3NPUStYa0MvVzB4MzgKUDg0T3JpdjhNdytCdktOZlMwMU94Y05PWU9yMENvYWM4Z1VxazljQ2dZRUFtYmFMYjROeEE3ckdkc1B1YU9UOEpSSjN6L2J0VzdnMXF4NUxvCkZ0b1c2Qm9vSnhmb2lhV1YrTURtcEFsL2FJZzRqMGJ1cXFwajU3UjlZWlhTK0xhdU1HUWl0azRPWi9ZS1lZSDUKK3psWTJ0VjhHUTdqM29CWURDd2puWWc9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
Si vous définissez des variables d'environnement par un autre moyen, par exemple via une interface web, vous pouvez également réutiliser ces valeurs.
Les valeurs doivent être les suivantes :
TO_NUMBERle numéro à appeler, j'ai utilisé mon numéro de téléphone portableVONAGE_NUMBERun numéro que je possède sur la plate-forme VonageVONAGE_APPLICATION_IDl'ID de l'application que j'ai créée dans la première sectionVONAGE_APPLICATION_PRIVATE_KEY64le contenu de mon fichierprivate.keyencodé en base64
La commande que j'utilise pour obtenir la valeur base64 est la suivante :
Tout assembler
En encodant les variables d'environnement avec des nouvelles lignes, nous pouvons les transférer en toute sécurité en tant que chaînes de caractères. En utilisant la configuration ci-dessus avec le fichier index.js que nous avons apporté plus tôt, je peux exécuter mon code localement (en ajoutant dotenv dans mon application), ou sur n'importe quelle autre plateforme.
C'est une petite chose mais je la rencontre dans des endroits inattendus lorsque je manipule les fichiers de clés privées, je vais donc me référer à ce post moi-même, j'en suis sûr.
