
Teilen Sie:
Lorna ist eine Software-Ingenieurin mit einer unheilbaren Blogging-Sucht. Sie versucht, Worte und Code gleichermaßen zu bändigen.
Verwendung von privaten Schlüsseln in Umgebungsvariablen
Lesedauer: 5 Minuten
Dieser Artikel wurde im März 2025 aktualisiert.
Viele unserer neueren APIs verwenden JWTs (JSON Web Tokens) für die Authentifizierung, was großartig ist. Da unsere JWTs jedoch mit privaten Schlüsseln signiert sind und diese Zeilenumbrüche enthalten, kann dies manchmal einige unserer üblichen Ansätze zur Handhabung von Anmeldeinformationen durcheinanderbringen!
In diesem Beitrag wird gezeigt, wie Sie einen privaten Schlüssel in einer Umgebungsvariablen verwenden können, und es wird ein Beispiel dafür in Aktion mit der Vonage Voice API und einer Netlify-Funktion gezeigt.
Vonage API-Konto
Um dieses Tutorial durchzuführen, benötigen Sie ein Vonage API-Konto. Wenn Sie noch keines haben, können Sie sich noch heute anmelden und mit einem kostenlosen Guthaben beginnen. Sobald Sie ein Konto haben, finden Sie Ihren API-Schlüssel und Ihr API-Geheimnis oben auf dem Vonage-API-Dashboard.
Erstellen Sie dann eine Anwendung mit Voice-Funktionen; für den nächsten Schritt benötigen Sie die Anwendungs-ID und die Datei mit dem privaten Schlüssel.
Sie können entweder über Ihr Account-Dashboard für diesen Teil verwenden, oder Sie können die CLI wie folgt verwenden:
vonage apps create privateDer Befehl gibt die Anwendungs-ID aus und schreibt den privaten Schlüssel in die fantasievoll benannte private.key Datei. Diese beiden Elemente werden im nächsten Schritt verwendet.
Warum nicht einfach die Datei hochladen?
Die Daten sind in private.key, richtig? Warum können wir nicht einfach die Datei verwenden, die wir auf der Festplatte haben?
Für eine lokale Anwendung ist das durchaus möglich, und Sie werden sehen, dass viele unserer Beispielanwendungen dies auch tun.
Bei einer "echten" Anwendung ist die private.key Datei jedoch nicht Teil der Anwendung und kann nicht auf die gleiche Weise wie die anderen Dateien behandelt werden.
A private.key Datei sollte niemals zur Versionskontrolle hinzugefügt werden; sie ist genauso ein geheimer Zugangscode wie Ihr Account-Passwort. Es ist auch wahrscheinlich, dass für diese Anwendung auf verschiedenen Plattformen unterschiedliche Anmeldedaten verwendet werden, z. B. auf Ihrer lokalen Entwicklungsplattform oder wenn die Anwendung auf einer Staging- oder Live-Plattform bereitgestellt wird.
In diesem Sinne brauche ich eine Möglichkeit, diesen privaten Schlüssel als Zeichenkette sicher auf andere Weise zu handhaben.
Erstellen einer einfachen Voice-Anrufanwendung
Eine gute Möglichkeit, dies in Aktion zu sehen, ist die Erstellung einer Anwendung, die die Voice API nutzt. Ich glaube nicht, dass ich jemals genug davon haben werde, mein Telefon programmgesteuert klingeln zu lassen!
Das heutige Beispiel verwendet Node.js und führt einen Telefonanruf mit einer einfachen Text-To-Speech-Ansage durch.
Bevor ich den Code schreibe, installiere ich das Vonage Node SDK Abhängigkeit:
Jetzt ist es Zeit für den Code! Für eine so einfache Anwendung packe ich das Ganze normalerweise einfach in index.jsein, etwa so:
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)
})
Schauen Sie sich das Codebeispiel an, und Sie werden feststellen, dass es einige Stellen gibt, an denen auf Umgebungsvariablen mit process.env.*.
Die Verwendung von Umgebungsvariablen ist eine großartige Möglichkeit, Code zu erstellen, der an mehreren Orten problemlos ausgeführt werden kann, da er sich in jedem Szenario einfach umschaut und die angegebenen Werte verwendet.
Insbesondere ziehe ich die Umgebung den Konfigurationsdateien für Cloud-Plattformen vor, bei denen ich zwar von der Versionskontrolle aus bereitstellen kann, aber niemals Anmeldedaten dort einfügen würde.
Für lokale Plattformen verwende ich dotenv um Umgebungsvariablen aus einer Konfigurationsdatei zu laden. Bei der Verwendung von dotenv oder bei einigen Cloud-Plattformen wie Netlify und Glitch ist es nicht möglich, mehrzeilige Werte für eine Umgebungsvariable zu verwenden. Um dies zu umgehen, verwende ich base64-kodierte Werte für meine Umgebungsvariablen und lasse meine Anwendung die Werte dekodieren, bevor ich sie verwende.
Vorbereiten der Umgebungsvariablen
Für die lokale Verwendung von dotenvoder für eine Plattform, die nicht mit mehrzeiligen Umgebungsvariablen umgehen kann, bereite ich eine .env Datei wie folgt vor:
TO_NUMBER=44777000777
VONAGE_NUMBER=44777000888
VONAGE_APPLICATION_ID=abcd1234-aaaa-bbbb-cccc-0987654321ef
VONAGE_APPLICATION_PRIVATE_KEY64=LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ25VaFp3N214cTljZHUKU21oL1UrekovdGRZSUxRVDF5VExjWnFETk11OW44WUVHMmMyR1JUbmR2a2cxeXlBVCtqTk45Zmp5eTg1Zi9EOG9zTzhPdnhRS0Y0aWpoblJlVTVDQStnU0o3UEhLa3U5YjJsMzZ2TmN5WFFCdWRJVk8KV2tBOERraTlFVHpqaG8rRnh0SGJuWGZHa3o3emtzUTJvMjVMemorblFkendCQlc3aXVrNVNqdkdYSkFEK0xQRUIveHhUVEhSRFZJRjNxYWM2dmM5L3NPUStYa0MvVzB4MzgKUDg0T3JpdjhNdytCdktOZlMwMU94Y05PWU9yMENvYWM4Z1VxazljQ2dZRUFtYmFMYjROeEE3ckdkc1B1YU9UOEpSSjN6L2J0VzdnMXF4NUxvCkZ0b1c2Qm9vSnhmb2lhV1YrTURtcEFsL2FJZzRqMGJ1cXFwajU3UjlZWlhTK0xhdU1HUWl0azRPWi9ZS1lZSDUKK3psWTJ0VjhHUTdqM29CWURDd2puWWc9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
Wenn Sie die Umgebungsvariablen auf andere Weise setzen, z. B. über eine Weboberfläche, können Sie diese Werte auch dort wiederverwenden.
Die Werte sollten sein:
TO_NUMBERdie anzurufende Nummer, ich habe meine Handynummer benutztVONAGE_NUMBEReine Nummer, die ich über die Vonage-Plattform besitzeVONAGE_APPLICATION_IDdie ID der Anwendung, die ich im ersten Abschnitt erstellt habeVONAGE_APPLICATION_PRIVATE_KEY64den Inhalt meinerprivate.keyDatei, base64-verschlüsselt
Der Befehl, mit dem ich den base64-Wert erhalte, lautet:
Alles zusammenfügen
Indem wir die Umgebungsvariablen mit Zeilenumbrüchen kodieren, können wir sie sicher als Zeichenketten übertragen. Wenn ich die obige Konfiguration mit der index.js Datei, die wir zuvor mitgebracht haben, kann ich meinen Code lokal ausführen (indem ich dotenv in meine Anwendung einfügen) oder auf jeder anderen Plattform ausführen.
Es ist nur eine Kleinigkeit, aber ich stoße beim Umgang mit den privaten Schlüsseldateien an unerwarteten Stellen darauf, so dass ich selbst sicher auf diesen Beitrag zurückgreifen werde.
