La création d’applications Express à pile complète a toujours impliqué la connexion à une base de données ou à des ressources externes nécessaires pour avoir des applications fonctionnelles. Lors de la connexion à ces ressources externes, nous aurions besoin d’un moyen de vérifier notre identité avant d’établir une connexion réussie.
Nous utilisons des clés secrètes spéciales ou des clés API spécifiques à notre application pour vérifier notre identité. Ces clés doivent toujours être tenues secrètes aux yeux du public, car le Web est un village ouvert, ou nous risquons de perdre notre application aux attaques de cybersécurité.
La gestion des clés API secrètes sur l’application principale a été ardue et de nombreuses solutions comme l’utilisation du .env
ont été proposées, mais ces solutions n’ont pas été efficaces lorsqu’elles ont été déployées sur le Web.
Introduction à la gestion des secrets Doppler
Doppler a, depuis son invention, facilité la gestion des secrets en réduisant la complexité impliquée dans la sécurisation des ressources secrètes nécessaires au sein de notre application pour qu’elle fonctionne. Doppler, en tant qu’outil intégré à notre application, aide notre application à évoluer à mesure qu’elle augmente en fonctionnalités en lui fournissant des contrôles d’accès, des journaux et des versions à granularité fine.
Doppler fournit un Universal Secrets Manager sécurisé et évolutif qui facilite le développement pour les développeurs en supprimant tout besoin de .env
fichiers, ou les secrets codés en dur inutiles et les informations d’identification copiées-collées. Ce gestionnaire de secrets universel fonctionne pour presque tous les langages de programmation, quelle que soit leur liste d’intégrations en constante augmentation. Doppler peut être intégré à un projet existant ou à votre premier projet en suivant les docs explicites pour l’installation de Doppler. L’outil Doppler CLI facilite grandement l’accès aux secrets dans n’importe quel environnement, que ce soit l’environnement de développement ou de production. De plus, nous disposons d’un tableau de bord pour gérer nos configurations d’applications.
Pour éviter de casser le code en production, Doppler crée automatiquement un instantané de nos derniers secrets et le stocke dans un fichier crypté. Pendant le développement, si nous ne pouvions pas accéder à l’API à laquelle nous nous connectons avec les clés secrètes, la CLI Doppler revient intelligemment à l’instantané du fichier crypté.
Ensuite, commençons à construire et à implémenter les différentes parties de notre application backend. Cela impliquera une série d’étapes simples pour définir puis démarrer notre serveur. Créons un dossier nommé Doppler project, changeons de répertoire dans ce dossier, puis à la racine du dossier initialisons une application Express :
mkdir “Doppler project”
cd Doppler project/
npm init -y
Installons les dépendances nécessaires au sein de notre application pour implémenter certaines fonctionnalités :
npm install express faunadb
La commande ci-dessus installerait la bibliothèque Express et le pilote JavaScript, faunedb, pour se connecter à la base de données. Cliquez ici pour créer un compte Fauna si vous n’avez personne.
Dans le tableau de bord, cliquez sur le bouton « NOUVELLE BASE DE DONNÉES », donnez un nom à votre base de données puis appuyez sur le bouton ENREGISTRER.
Une fois que vous avez créé votre base de données, vous devez créer une collection nommée Posts. C’est avec cela que nous allons interagir dans notre code source pour créer un document (un article) dans notre application.
Créons maintenant notre /server.js
et mettez-le à jour avec le code suivant pour implémenter un serveur pour notre application :
const express = require(“express”);
const faunadb = require(“faunadb”),
const q = faunadb.query;
const secret = process.env.FAUNADB_SERVER_SECRET;
const client = new faunadb.Client({
secret: secret,
});
const app = express();
app.use(express.json());
const PORT = process.env.PORT || 8000;
app.listen(PORT, () => console.log(` Server listening at port ${PORT}`));
Définissons maintenant les différentes routes qui connecteraient notre application backend à la base de données et effectueraient des actions CRUD dessus lorsque nous envoyons des requêtes au serveur.
...
app.post('/posts', async (req, res) => {
try {
const {post, description } = req.body;
const { data } = await client.query(
q.Create(q.Collection('Posts'), { data: { post, description } })
);
res.status(201).json(data);
} catch (error) {
res.status(500).json({error: error.description})
}
});
...
Dans le code ci-dessus, nous créons une donnée post (Document) dans notre base de données lorsque nous faisons une requête POST sur le chemin /posts de notre application.
Pour tester nos routes d’application, nous utiliserons n’importe quel client HTTPS, et pour ce didacticiel, nous utiliserons l’application Postman pour le tester.
Avant de commencer à tester notre application, implémentons une autre route, pour obtenir tous les documents (posts) dans notre application.
...
app.get('/posts', async (req, res) => {
try {
let { data } = await client.query(
q.Map(
q.Paginate(q.Documents(q.Collection("Posts"))),
q.Lambda("X", q.Get(q.Var("X")))
)
)
res.status(200).json(data[0][“data”])
} catch (error) {
res.status(500).json({error: error.description})
}
});
...
Configuration de Doppler pour la gestion des secrets
Maintenant que nous avons implémenté les routes pour notre application, configurons Doppler pour notre projet afin de gérer nos variables d’environnement, alias clés secrètes.
Après avoir créé un compte et un espace de travail sur Doppler, vous pouvez créer un nouveau projet. Cliquez sur le lien Projet, puis sur l’icône plus pour créer et ajouter un nouveau projet à l’espace de travail. Nous l’appellerons Doppler-Express. Une fois créé, nous disposons de trois environnements pour notre projet à savoir :
- Développement
- Mise en scène
- Production
Ce sont des environnements pour gérer les ressources secrètes que nous utiliserons dans notre application.
Maintenant que notre projet est configuré sur le site Web de Doppler, configurons notre environnement local sur notre machine locale à l’aide de la CLI Doppler.
Configurer Doppler sur l’environnement local à l’aide de la CLI Doppler
Procédons à l’installation de la CLI Doppler qui nous aidera dans la phase de développement de notre application.
# Install pre-reqs
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
# Add Doppler's GPG key
curl -sLf --retry 3 --tlsv1.2 --proto "=https" 'https://packages.doppler.com/public/cli/gpg.DE2A7741A397C129.key' | sudo apt-key add -
# Add Doppler's apt repo
echo "deb https://packages.doppler.com/public/cli/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/doppler-cli.list
# Fetch and install latest doppler cli
sudo apt-get update && sudo apt-get install doppler
Maintenant que nous avons fini de configurer et d’installer Doppler CLI sur notre machine locale, exécutez le code suivant pour confirmer qu’il a été installé avec succès.
doppler --version
# v3.32.0
Ensuite, authentifions notre développement local avec l’environnement de développement distant car ils devraient être synchronisés les uns avec les autres.
doppler login
? Open the authorization page in your browser? Yes
Your auth code is:
XXXXh_XXXXphone_bus_XXXXo_XXXXville
Waiting...
Cela ouvre le navigateur pour vous connecter à votre compte et authentifier votre environnement local. Remplissez votre e-mail ou connectez-vous avec Google, puis copiez et collez le jeton d’authentification affiché sur le terminal pour authentifier Doppler.
À l’intérieur de la racine, exécutez la commande doppler setup et sélectionnez la bonne option pour configurer votre environnement local :
doppler setup
? Select a project: doppler-express
? Select a config: dev
┌─────────┬─────────────────┬─────────────────────────────────────────────────┐
│ NAME │ VALUE │ SCOPE │
├─────────┼─────────────────┼─────────────────────────────────────────────────┤
│ config │ dev │ /home/ikehakinyemi/Projects/NodeJS/Doppler proj │
│ │ │ ect │
│ project │ doppler-express │ /home/ikehakinyemi/Projects/NodeJS/Doppler proj │
│ │ │ ect │
└─────────┴─────────────────┴─────────────────────────────────────────────────┘
Revenons maintenant à notre projet distant sur le site Web et cliquez sur la section de développement du projet. Cliquez ensuite sur Ajouter un secret pour ajouter un nouveau secret comme ci-dessous :
Ajoutez le nom de votre clé secrète et collez la valeur de la clé secrète, qui est la clé secrète elle-même. Cliquez sur le bouton Enregistrer pour ajouter la clé secrète à l’environnement de développement.Revenez à votre terminal et exécutez la commande suivante pour confirmer que votre clé secrète est synchronisée avec votre environnement distant :
echo $(doppler secrets get FAUNADB_SERVER_SECRET --plain)
fnAEUIdhSoACXXXXXXXX-n6QxpBZXXXXXXXXpkBp
Utilisons maintenant Postman pour tester notre application et nous assurer que nos routes accèdent à la base de données :
Le premier document a été créé avec succès dans la base de données. Connectez-vous à votre base de données et confirmez-le.
Ensuite, vérifions la deuxième route qui est une requête GET, pour renvoyer tous les documents de la base de données comme ci-dessous :
Nous avons réussi à configurer Doppler pour une application Express afin de cacher et gérer en toute sécurité nos clés secrètes utilisées pour son développement.
Nous avons éliminé la nécessité d’avoir un .env
fichier, et peut désormais gérer facilement ces clés secrètes parmi nos amis ou notre équipe en leur donnant accès à l’espace de travail sur le site Doppler. Et nous pouvons intégrer les services Doppler dans n’importe quel Node.JS
application car elle utilise l’approche native de récupération des variables d’environnement via le process.env[“YOUR_SECRET_KEY”]
. Le code utilisé dans ce tutoriel est disponible sur GitHub.