Authentification HTTP Basic Header avec Firebase functions

  • Modifié il y à2 mois 
  • Temps de lecture :2Minutes

description : « Sécuriser » simplement une application sur Firebase. Exemple empêcher l’accès à l’environnement de recette.


Attention ne fonctionne pas en local avec « firebase serve » ou le shell firebase. Il faut obligatoirement déployer la fonction pour pouvoir tester.

// functions/index.js'use strict';
const functions = require("firebase-functions");
const path = require("path");
const functions = require('firebase-functions');
// CORS Express middleware to enable CORS Requests.
const cors = require('cors')({origin: true});
exports.auth = functions.https.onRequest((req, res) => {
    // check for basic auth header
    if (!req.headers.authorization || req.headers.authorization.indexOf('Basic ') === -1) {
      // le navigateur détecte automatiquement l'header
      // et ouvre une boite de dialogue avec les champs User/Password
      res.status(401).setHeader("WWW-Authenticate", "Basic");
      return res.end();
  }
  // verify auth credentials
  const base64Credentials = req.headers.authorization.split(' ')[1];
  const credentials = Buffer.from(base64Credentials, 'base64').toString('ascii');
  const [username, password] = credentials.split(':');
  if (username === "demo" && password === "demo") {
      console.log(username, "successfully logged in");
      // rediriger vers l'application
      // etant donnee qu'on est sur une single page application
      // une seule authentification est nécessaire pour charger
      // l'application dans le navigateur
      return res.sendFile(path.join(__dirname, "public/index.html"));
  }
  console.log(username, "failed to logged in with password: ", password);
  res.status(401).setHeader("WWW-Authenticate", "Basic");
  return res.send("Unauthorized");
});

A placer dans le dossier functions. La partie hosting ne devra comporter que les assets( Images, CSS). Il ne devra pas contenir de fichier avec le nom « index.html ».

fucntions/public/index.html


<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Application Sample</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- GOOGLE FONT -->
  <link href="<https://fonts.googleapis.com/css?family=Montserrat:400,600,700>" rel="stylesheet" type="text/css">
<body>
  <noscript>Please enable JavaScript to continue using this application.</noscript>
  <script type="application/javascript">
  alert("Vous avez accéder à la page.");
  </script>
</body>
</html>

Inspiré de : https://www.dotnetcurry.com/nodejs/1231/basic-authentication-using-nodejs

Laisser un commentaire