Développeur FullStack & Devops

Notes et mémos techniques

Basic Auth

La Basic Auth (Basic Authentication en 🇬🇧) ou Schéma d'Authentification Basique en 🇫🇷 RFC7617 est l'un des schéma d'authentification HTTP de la "structure d’authentification HTTP" Elle permet de protéger une URL par un simple couple login/mot de passe. Lors de l'accès à une URL protégée par une Basic Auth, le navigateur fait apparaître une pop-up demandant les credentials (login/pass).

L’utiliser ou pas ?

Ce mécanisme permet de mettre en place un blocage simple, mais elle est si basique qu’elle peut être sniffée si certaines requêtes ne passent en https car les login et password sont juste encodés en base64 ou simplement brute forcée (si d’autres mécanismes de limitations ne sont pas en place).

  • la basic auth est donc déconseillée 👎 pour sécuriser l’accès à une application web
  • en revanche elle est adaptée 👍 dans le cas où on souhaite simplement cacher une URL des crawlers (Googlebot etc) pour par exemple éviter l’indexation des sites (environemens de recette, pré-prod etc)

Protocole et en-têtes HTTP

La sécurisation par l’authentification basique peut se faire à différents niveaux de l’infrastructure, soit au niveau des :

  • Reverse Proxy (Nginx, Apache) et même certains CDN qui proposent des fonctionnalités de Proxy comme Akamai
  • serveur web Nginx, Apache, IIS
  • application web via des framework comme Express, .Net

Séquencement

  1. le navigateur commence par effectuer un http GET l’URL protégée par une Basic Auth
  2. en fonction de l’infra qui authentifie (reverse proxy ou serveur web), on reçoit coté client un couple en-tête HTTP / code HTTP différent, mais le schéma d’authentification est défini au niveau de ces en-têtes (ici Basic):
    • du Proxy qui répond avec :
      1. code HTTP 407 (Proxy Authentication Required)
      2. en-tête HTTP : Proxy-Authenticate: Basic realm="Acces restreint"
    • ou du serveur Web qui répond avec :
      1. code HTTP 401 (Unauthorized)
      2. en-tête HTTP : WWW-Authenticate: Basic realm="Acces restreint"
  3. la pop-up d’authentification s’affiche alors dans le Navigateur
    (l’authentification à travers l’URL http://login:pass@exemple.com est dépréciée)
  4. le navigateur encode en base64 la chaîne: « login:pass » et la transmet via un GET (de la même ressource) avec l’en-tête HTTP Authorization
    ex: Authorization: Basic bG9naW46cGFzcw==
  5. le Proxy ou Serveur Web qui gère l’authentification réponds après vérification, soit par une 200 (et tout roule), soit par une **403** (Forbidden)…
  6. le navigateur garde en cache ces credentials et les envois lors de toutes les requêtes HTTP vers ce realm (ici la chaine Acces restreint)
  7. lorsque l’onglet est fermé, le navigateur supprime ces credentials de son cache

Encodage et décodage

L'encodage

Nodejs:

Buffer.from(b64, ‘base64’).toString()

https://nodejs.org/api/buffer.html#buffer_buffer

Navigateur:

atob(b64);

https://developer.mozilla.org/fr/docs/Web/API/WindowOrWorkerGlobalScope#Methods

Express

basic-auth est un middleware Express (Nodejs) qui implémentent la Basic Auth.

net
http
reseau
securite
base64
basicauth
securite
rédigé le 11/08/19 par Behrouze
A proposCheat SheetsOutilsVidéos