Passer au contenu
Aucun résultat
  • Mes GPTs
    • Générateur tableau HTML pour vos gpts
  • GPT4Free
  • A télécharger
  • Réalisations
  • Projets
    • NoNetChat
    • LoveStarter
    • Whisper Web
    • Strut
    • TubeList
    • Rustdesk Web Client
  • Parrainage
  • Jeux
    • Dés 3D
    • Pile ou Face
  • Ansible
    • Ansible – formater clef SSH pour playbook yaml
    • Ansible Vault – Chiffrement et Déchiffrement
  • Code
    • Monaco Diff Viewer – Comparateur de texte/code
    • Code – Suppression des commentaires
    • Base64 – Encodage et Décodage
    • Code HTML/JS/CSS – Mise en forme
    • Conversion de texte (majuscule, minuscule, camelCase, …)
    • Convertisseur Markdown en HTML
    • Générateur Hash SRI
    • Minification et Unminification
    • URL – Encodage et Décodage
  • Outils
    • Carte Interactive des Rapports de la Cour des Comptes – Explorez la Gestion Publique en France et Outre-Mer avec des GPTs Spécifiques
    • Draw
    • Nmap Viewer
    • Calculatrice scientifique
    • Crontab – Parser
    • Education Nationale – Traitement des politiques d’habilitation
    • Générateur de mot de passe
    • MiFare – UID Converter
    • VNC – Déchiffrement
    • Debian – Générateur sources.list
    • Ubuntu – Générateur Sources.list
    • Polynésie Française – Calculez votre salaire brut/net
  • Nouvelle-Calédonie
    • Status Gouv NC – Suivi des sites Web publics
    • Nouvelle-Calédonie – Le droit calédonien et ses racines culturelles
    • Nouvelle-Calédonie – Calculez votre salaire brut/net
    • Nouvelle-Calédonie – Ouvrir un compte bancaire
  • Jacob Brown Acro
PASCAL MIETLICKI

INGÉNIEUR INSA – MASTER IAE/TSM – ADMINISTRATEUR SYSTÈMES ET RÉSEAUX – DÉVELOPPEUR PHP/LARAVEL/IONIC/FLUTTER – ADMINISTRATEUR BUSINESS OBJECTS – ADMINISTRATEUR RANCHER/KUBERNETES – DEVOPS

  • Mes GPTs
    • Générateur tableau HTML pour vos gpts
  • GPT4Free
  • A télécharger
  • Réalisations
  • Projets
    • NoNetChat
    • LoveStarter
    • Whisper Web
    • Strut
    • TubeList
    • Rustdesk Web Client
  • Parrainage
  • Jeux
    • Dés 3D
    • Pile ou Face
  • Ansible
    • Ansible – formater clef SSH pour playbook yaml
    • Ansible Vault – Chiffrement et Déchiffrement
  • Code
    • Monaco Diff Viewer – Comparateur de texte/code
    • Code – Suppression des commentaires
    • Base64 – Encodage et Décodage
    • Code HTML/JS/CSS – Mise en forme
    • Conversion de texte (majuscule, minuscule, camelCase, …)
    • Convertisseur Markdown en HTML
    • Générateur Hash SRI
    • Minification et Unminification
    • URL – Encodage et Décodage
  • Outils
    • Carte Interactive des Rapports de la Cour des Comptes – Explorez la Gestion Publique en France et Outre-Mer avec des GPTs Spécifiques
    • Draw
    • Nmap Viewer
    • Calculatrice scientifique
    • Crontab – Parser
    • Education Nationale – Traitement des politiques d’habilitation
    • Générateur de mot de passe
    • MiFare – UID Converter
    • VNC – Déchiffrement
    • Debian – Générateur sources.list
    • Ubuntu – Générateur Sources.list
    • Polynésie Française – Calculez votre salaire brut/net
  • Nouvelle-Calédonie
    • Status Gouv NC – Suivi des sites Web publics
    • Nouvelle-Calédonie – Le droit calédonien et ses racines culturelles
    • Nouvelle-Calédonie – Calculez votre salaire brut/net
    • Nouvelle-Calédonie – Ouvrir un compte bancaire
  • Jacob Brown Acro
PASCAL MIETLICKI

INGÉNIEUR INSA – MASTER IAE/TSM – ADMINISTRATEUR SYSTÈMES ET RÉSEAUX – DÉVELOPPEUR PHP/LARAVEL/IONIC/FLUTTER – ADMINISTRATEUR BUSINESS OBJECTS – ADMINISTRATEUR RANCHER/KUBERNETES – DEVOPS

Déploiement d’une application Electron en mode kiosque avec authentification automatique et chiffrement de la configuration

  • 15 août 2025
  • Développement, Travaux / Expériences

Dans la plupart des établissements, les Tableaux Blancs Interactifs (TBI) sont devenus le cœur des cours numériques : ils affichent des ressources en ligne, des applications pédagogiques ou des outils de collaboration. Pourtant, dès qu’il s’agit de maintenir une session authentifiée — sans imposer aux étudiants de saisir un mot de passe à chaque cours et sans risquer la fuite de ces identifiants dans les DevTools ou le gestionnaire du navigateur — le défi devient concret :

  • Comment démarrer automatiquement une application Web protégée sur un TBI, sans jamais exposer le mot de passe ?
  • Comment verrouiller l’interface en mode kiosque tout en gardant une porte de sortie (fermeture propre) ?
  • Comment packager cette solution en un exécutable autonome, facile à déployer et à maintenir ?
  • Comment protéger votre code JavaScript embarqué (app.asar) pour éviter que quelqu’un n’en extraie les credentials en clair ?

Ce guide pas à pas vous montre une architecture robuste basé sur le projet electron de github pour répondre à ces besoins :

  1. Authentification automatique via un preload sécurisé,
  2. Mode kiosque adaptable entre développement et production,
  3. Chiffrement de votre configuration (login/mot de passe) en AES-256,
  4. Packaging et signature de l’application pour un déploiement clé en main.

Table of Contents

    • 📋 Prérequis
  • Création du projet Electron
  • Fichiers de configuration pour le dev
  • Contenu de main.js
  • Contenu de preload.js
  • Configuration de package.json
  • Signature et safeStorage (optionnel)
  • VII. Commandes résumé rapide

📋 Prérequis

  1. Environnement de développement
    • Node.js v16+ et npm
    • Git (optionnel)
  2. Outils
    • Visual Studio Code (ou votre IDE préféré)
    • Powershell (Windows) ou Terminal (Unix)
    • Scoop / Chocolatey / Homebrew pour installer les Build Tools (Windows/macOS)
  3. Certificat de signature (optionnel mais recommandé pour safeStorage)
  4. Connaissances de base en JavaScript et ligne de commande

Création du projet Electron

  1. Initialiser le dossier
    mkdir secure-electron-login && cd secure-electron-login
    npm init -y
  2. Installer Electron et le builder
    npm install electron --save-dev
    npm install electron-builder cross-env --save-dev
  3. Structure initiale
    secure-electron-login/
    ├── main.js
    ├── preload.js
    ├── package.json
    └── config.json

Fichiers de configuration pour le dev

Créer config.json à la racine :

{
« login »: « professeur@tbi.ex »,
« password »: « MotDePasseUltraSecret »
}

Créer encrypt-config.js pour générer le .enc :

// encrypt-config.js
const fs     = require('fs');
const path   = require('path');
const crypto = require('crypto');

// ⚠️ même clé que STATIC_ENCRYPTION_KEY dans main.js
const KEY = Buffer.from(
  '4f62b5c8d9e0a1b2c3d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f8091a2b',
  'hex'
);
const inPath  = path.join(__dirname, 'config.json');
const outPath = path.join(__dirname, 'config.enc');
// lit le JSON en clair
const data    = fs.readFileSync(inPath);
// génère un IV aléatoire (16 octets)
const iv      = crypto.randomBytes(16);
// chiffre avec AES-256-CBC
const cipher  = crypto.createCipheriv('aes-256-cbc', KEY, iv);
const encrypted = Buffer.concat([iv, cipher.update(data), cipher.final()]);
// écrit le buffer [iv|payload]
fs.writeFileSync(outPath, encrypted);
console.log('✅ config.enc généré');

Contenu de main.js

Import et clés

// main.js
const { app, BrowserWindow, ipcMain, Menu } = require('electron');
const path = require('path');
const fs = require('fs');
const crypto = require('crypto');

// Clé AES-256 (32 octets hex)
const STATIC_KEY = Buffer.from(
'4f62b5c8d9e0a1b2c3d4e5f60718293a4b5c6d7e8f9012a3b4c5d6e7f8091a2b', 'hex'
);

Fonction de chargement des credentials

const isDev = process.env.NODE_ENV === 'development';

function loadCredentials() {
if (isDev) {
// DEV : on lit config.json à la racine
const jsonPath = path.join(__dirname, 'config.json');
if (!fs.existsSync(jsonPath)) throw new Error('config.json introuvable en dev');
return JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
}
// PROD : on lit config.enc dans le dossier des ressources
const encPath = path.join(process.resourcesPath, 'config.enc');
if (!fs.existsSync(encPath)) throw new Error('config.enc introuvable en prod');
const buf = fs.readFileSync(encPath);
const iv = buf.slice(0, 16), data = buf.slice(16);
const decipher = crypto.createDecipheriv('aes-256-cbc', STATIC_KEY, iv);
const decrypted = Buffer.concat([decipher.update(data), decipher.final()]);
return JSON.parse(decrypted.toString());
}

Création de la fenêtre et injection

let credentials;

function createWindow() {
  const win = new BrowserWindow({
    width: 1280, height: 800,
    kiosk: false,
    fullscreen: !isDev,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js'),
      contextIsolation: true,
      nodeIntegration: false
    }
  });

  win.loadURL('https://monapp.ex');
  win.webContents.on('did-finish-load', () => {
    win.webContents.send('credentials', credentials);
  });

  if (isDev) {
    win.webContents.openDevTools({ mode: 'detach' });
    Menu.setApplicationMenu(Menu.buildFromTemplate([
      { label: 'Dev', submenu: [{ role: 'reload' }, { role: 'toggleDevTools' }] }
    ]));
  } else {
    Menu.setApplicationMenu(Menu.buildFromTemplate([
      { label: 'Fichier', submenu: [{ role: 'quit', label: 'Quitter' }] }
    ]));
  }

  win.webContents.on('before-input-event', (e, input) => {
    if (isDev && input.control && input.shift && input.key.toLowerCase() === 'i') {
      win.webContents.toggleDevTools();
      e.preventDefault();
    }
  });
}

app.whenReady()
   .then(() => { credentials = loadCredentials(); })
   .then(createWindow)
   .catch(err => {
     console.error('Erreur à l’initialisation :', err);
     app.quit();
   });

Contenu de preload.js

// preload.js
const { contextBridge, ipcRenderer } = require('electron');

window.addEventListener('DOMContentLoaded', () => {
  const style = document.createElement('style');
  style.textContent = `
    /* Cache et désactive l'icône œil et tout élément lié */
    #show_password,
    .show-password,
    .password-indicator {
      display: none !important;
      pointer-events: none !important;
    }
  `;
  document.head.appendChild(style);
});

contextBridge.exposeInMainWorld('secureLogin', {
  // facultatif si tu veux déclencher manuellement
  fillLoginForm: () => ipcRenderer.send('fill-login')
});

ipcRenderer.on('credentials', (_, { login, password }) => {
  const tryInject = () => {
    const loginInput    = document.querySelector('#user_email');
    const passwordInput = document.querySelector('#password_field');
    const form          = passwordInput?.closest('form');

    if (loginInput && passwordInput && form) {
      loginInput.value    = login;
      passwordInput.value = password;
      form.submit();
    } else {
      // réessaie toutes les 200 ms si les éléments ne sont pas encore présents
      setTimeout(tryInject, 200);
    }
  };

  tryInject();
});

Configuration de package.json

{
  "name": "secure-electron-login",
  "version": "1.0.0",
  "description": "Application kiosque Electron pour Visible Body avec login automatique sécurisé",
  "author": "Pascal Mietlicki",
  "main": "main.js",
  "scripts": {
    "dev": "cross-env NODE_ENV=development electron .",
    "encrypt-config": "node encrypt-config.js",
    "dist": "npm run encrypt-config && electron-builder",
    "start": "npm run dist && start \"\" \"dist\\win-unpacked\\VisibleBodySecureLogin.exe\""
  },
  "devDependencies": {
    "cross-env": "^7.0.3",
    "electron": "^29.0.0",
    "electron-builder": "^26.0.12"
  },
  "build": {
    "extraResources": [
    { "from": "config.enc", "to": "config.enc" }
  ],
    "appId": "com.visiblebody.securelogin",
    "productName": "VisibleBodySecureLogin",
    "files": [
      "main.js",
      "preload.js",
      "package.json"
    ],
    "directories": {
      "output": "dist"
    },
    "win": {
      "target": [
        "nsis",
        "portable",
        "zip"
      ],
      "icon": "assets/icon.ico"
    },
    "mac": {
      "target": "dmg",
      "icon": "assets/icon.icns"
    },
    "linux": {
      "target": "AppImage",
      "icon": "assets"
    }
  }
}

Signature et safeStorage (optionnel)

Windows (.pfx) :

"build": {
  "win": {
    "certificateFile": "moncert.pfx",
    "certificatePassword": "monMotDePasseCertif"
  }
}

macOS (Developer ID) :

"build": {
  "mac": {
    "identity": "Developer ID Application: MonOrg (TEAMID)"
  }
}

Activation de safeStorage :

const { safeStorage } = require('electron');
if (app.isPackaged && safeStorage.isEncryptionAvailable()) {
  // safeStorage.encryptString / decryptString utilisables
}

VII. Commandes résumé rapide

  • Chiffrement de la configuration (config.json → config.enc)
    npm run encrypt-config
  • Dév :
    npm install
    npm run dev
  • Build/Prod :
    npm install
    npm run start
    (Génère config.enc, compile, signe, lance l’exécutable.)

npm run start exécute en chaîne encrypt-config, dist et lance l’EXE généré.

Pour macOS/Linux, adaptez la commande start du script package.json afin d’ouvrir directement votre binaire.


Partager :

  • Cliquer pour partager sur X(ouvre dans une nouvelle fenêtre) X
  • Cliquez pour partager sur Facebook(ouvre dans une nouvelle fenêtre) Facebook
  • Cliquer pour imprimer(ouvre dans une nouvelle fenêtre) Imprimer
  • Cliquer pour envoyer un lien par e-mail à un ami(ouvre dans une nouvelle fenêtre) E-mail
  • Cliquez pour partager sur LinkedIn(ouvre dans une nouvelle fenêtre) LinkedIn
  • Cliquez pour partager sur Reddit(ouvre dans une nouvelle fenêtre) Reddit
  • Cliquez pour partager sur Tumblr(ouvre dans une nouvelle fenêtre) Tumblr
  • Cliquez pour partager sur Pinterest(ouvre dans une nouvelle fenêtre) Pinterest
  • Cliquez pour partager sur Pocket(ouvre dans une nouvelle fenêtre) Pocket
  • Cliquez pour partager sur Telegram(ouvre dans une nouvelle fenêtre) Telegram
  • Cliquez pour partager sur WhatsApp(ouvre dans une nouvelle fenêtre) WhatsApp
  • Cliquer pour partager sur Mastodon(ouvre dans une nouvelle fenêtre) Mastodon
  • Cliquer pour partager sur Nextdoor(ouvre dans une nouvelle fenêtre) Nextdoor

J’aime ça :

J’aime chargement…

Articles similaires

Étiquettes
# AES-256-CBC# authentification automatique# auto-login# borne interactive# chiffrement ASAR# code signing# config.enc# cross-env# DevTools# Electron# electron-builder# javascript# Linux# macOS# mode kiosque# node.js# packaging Electron# preload.js# safeStorage# sécurité# TBI# Windows
Article précédent Héberger RustDesk dans Kubernetes avec client Web
Article suivant ⚡Boostez votre productivité avec bolt.new : créez et déployez des apps en un clic grâce à l’IA
Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
To find out more, including how to control cookies, see here: Politique relative aux cookies

ServiceAvantagesLien
BinanceProfitez de frais réduits à vie sur vos transactions.Accéder
BoursoramaRecevez jusqu'à 150€ offerts à l'ouverture.Accéder
Crypto.comObtenez 25$ de bonus après inscription. Code : 8qzruhg7uhAccéder
DeBlockRecevez une prime aléatoire de 10€ à 500€.Accéder
FreeBitco.inGagnez des Bitcoins gratuits en jouant à des jeux et en participant à des tirages.Accéder
Nexo.comObtenez jusqu'à 25$ de bonus en BTC (bitcoin) après inscription. Code : krjlaswc9aAccéder
RevolutObtenez une carte gratuite et 20€ après activation.Accéder

Ponctuel
Mensuellement

Faire un don ponctuel

Faire un don mensuel

Choisir un montant

€2,00
€5,00
€10,00
€2,00
€5,00
€10,00

Ou saisir un montant personnalisé

€

Un grand merci pour votre don ! Vous venez de sponsoriser ma prochaine insomnie créative !

Merci pour votre don mensuel ! Vous venez de me propulser du statut de blogueur solitaire à celui de créateur soutenu par une légende : vous !

Faire un don Faire un don mensuel

ARTICLES EN VOGUE

  • 🎲 Jeux de Société Sans Cartes ni Plateau : Amusez-vous N'importe Où, N'importe Quand !
    🎲 Jeux de Société Sans Cartes ni Plateau : Amusez-vous N'importe Où, N'importe Quand !
  • MAS: La Solution Ultime pour l'Activation de Windows et Office par massgrave.dev
    MAS: La Solution Ultime pour l'Activation de Windows et Office par massgrave.dev
  • Comment dupliquer son badge d'immeuble avec un smartphone
    Comment dupliquer son badge d'immeuble avec un smartphone
  • Les meilleurs sites web gratuits pour trouver des guides d'utilisation, des manuels d'entretien et des fiches techniques
    Les meilleurs sites web gratuits pour trouver des guides d'utilisation, des manuels d'entretien et des fiches techniques
  • Polynésie Française - Calculez votre salaire brut/net
    Polynésie Française - Calculez votre salaire brut/net

CATÉGORIES

  • Android
  • Bons plans
  • Business Objects
  • Code
  • Déploiement
  • Développement
  • Développement personnel
  • Divers
  • Docker
  • Domotique
  • Droit
  • Education
  • Energie
  • Formations
  • GED
  • Impôts
  • Intelligence Artificielle
  • Kubernetes
  • Linux
  • Logiciels libres
  • Mac
  • Manuels
  • Messagerie
  • Nouvelle-Calédonie
  • Outils
  • Projets
  • Rancher
  • Rapports
  • Retrogaming
  • Sciences sociales
  • Sécurité / Réseau
  • Travaux / Expériences
  • Tutoriel
  • Vie pratique
  • Windows

STATISTIQUES

  • 180 674 visites
  • LinkedIn
  • Facebook
  • Instagram
  • Twitter
  • Amazon
  • Spotify

Publications similaires

NoNetChat Web : la messagerie décentralisée, sécurisée et locale en P2P

  • 24 août 2025

⚡Boostez votre productivité avec bolt.new : créez et déployez des apps en un clic grâce à l’IA

  • 22 août 2025

Héberger RustDesk dans Kubernetes avec client Web

  • 8 août 2025

ARTICLES RÉCENTS

  • NoNetChat Web : la messagerie décentralisée, sécurisée et locale en P2P
  • ⚡Boostez votre productivité avec bolt.new : créez et déployez des apps en un clic grâce à l’IA
  • Déploiement d’une application Electron en mode kiosque avec authentification automatique et chiffrement de la configuration
  • Héberger RustDesk dans Kubernetes avec client Web
  • USBIPD-WIN : Connecter un périphérique USB à WSL 2
  • Exécuter un pipeline GitLab en local avec gitlab-ci-local
  • 🎲 Monopoly : L’inventrice oubliée derrière le jeu culte
  • Top 5 des applications gratuites pour partager les dépenses : Splitwise, Splitpro et les meilleures alternatives

À TÉLÉCHARGER

  • BDD pour la gestion d'un parc de véhicule (568810 téléchargements )
  • Calcul d'itinéraires grâce à la théorie des graphes (562336 téléchargements )
  • Le manuel de l'administrateur système sous Linux (542909 téléchargements )
  • Assurer la sécurité des réseaux (529709 téléchargements )
  • Tutoriel sur Thunderbird (525322 téléchargements )
  • Base de connaissances sur Business Objects (502538 téléchargements )
  • Etude de marché : personnes âgées dépendantes (486420 téléchargements )
  • Initiation à l'informatique sous Windows (465022 téléchargements )

administration réseau administration système android apache API auto-hébergement automatisation cert-manager compatibilité confidentialité configuration devops Docker Docker Compose déploiement gestion des fichiers gestion des ressources gestion des utilisateurs HTTPS infrastructure IT installation Intelligence Artificielle interface utilisateur intégration kubernetes ldap Linux Nouvelle-Calédonie open-source Open source outils performance personnalisation protection des données rancher reverse proxy réseau ssl sécurité sécurité informatique sécurité réseau TLS tools Tutoriel Windows

Méta

  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR

Flux RSS

Copyright © 2025 - Pascal MIETLICKI. All rights reserved.

💎 Boostez vos finances avec ces offres exclusives ! 🚀

Profitez des meilleurs avantages avec ces offres de parrainage :

ServiceAvantagesLien
BinanceProfitez de frais réduits à vie sur vos transactions.Accéder
BoursoramaRecevez jusqu'à 150€ offerts à l'ouverture.Accéder
Crypto.comObtenez 25$ de bonus après inscription. Code : 8qzruhg7uhAccéder
DeBlockRecevez une prime aléatoire de 10€ à 500€.Accéder
FreeBitco.inGagnez des Bitcoins gratuits en jouant à des jeux et en participant à des tirages.Accéder
Nexo.comObtenez jusqu'à 25$ de bonus en BTC (bitcoin) après inscription. Code : krjlaswc9aAccéder
RevolutObtenez une carte gratuite et 20€ après activation.Accéder
%d