Skip to content

annuaire-entreprises-data-gouv-fr/admin-auth

Repository files navigation

License Badge

Bienvenue sur le dépôt permettant de limiter les accès à des zones restreintes aux seuls utilisateurs authentifiés via OIDC et dont l'email fait partie d'une liste de mails autorisés, pour le projet Annuaire des Entreprises.

Dépôts liés 🏗

Ce dépôt fait partie d'un ensemble de services qui constituent l'Annuaire des Entreprises.

Liste des URI

URI Description
/admin/auth/api Vérifie si l'utilisateur est authentifié et est connecté, redirige vers /admin/auth/login si non connecté
/admin/auth/login Redirige l'utilisateur vers la page d'authorization du serveur OIDC
/api/auth/agent-connect/callback URL sur laquelle l'utilisateur est redirigé par le serveur OIDC afin de finaliser la création de la session
/admin/auth/logout-callback Supprime la session

Usage avec Nginx

Le module NGINX http auth request est utilisé pour protéger les accès aux pages restreintes.

Exemple de protection de l'ensemble des accès à kibana (hors assets).

  location / {
    auth_request /admin/auth/api;

    proxy_pass   http://kibana:5601;
    proxy_set_header Host $host;
  }

  location ~* ^/(translations|ui)/ {
    proxy_pass   http://kibana:5601;
    proxy_set_header Host $host;
  }

  location ~* \.(js|jpg|png|css|svg|woff2|ico)$ {
    proxy_pass   http://kibana:5601;
    proxy_set_header Host $host;
  }

  # HTTP 401 returned by /admin/auth/api are served as HTTP 302
  error_page 401 =302 /admin/auth/login;

  # Check if the user is authenticated
  location = /admin/auth/api {
    internal;
    proxy_pass              http://auth:3000;
    proxy_pass_request_body off;
    proxy_set_header        Content-Length "";
    proxy_set_header        X-Original-URI $request_uri;
  }

  # Login page
  location = /admin/auth/login {
    proxy_pass              http://auth:3000;
    proxy_pass_request_body off;
    proxy_set_header        Content-Length "";
    proxy_set_header        X-Original-URI $request_uri;
  }

  location ~ /admin/auth {
    proxy_pass              http://auth:3000;
  }

  location ~ /api/auth/agent-connect {
    proxy_pass              http://auth:3000;
  }

Workflow correspondant à la configuration Nginx ci-dessus

sequenceDiagram
    Client->>Nginx: GET https://annuaire-entreprises.data.gouv.fr/restricted-area
    Nginx->>AdminAuth: GET /admin/auth/api
    AdminAuth->>Nginx: HTTP 401
    Nginx->>AdminAuth: GET /admin/auth/login
    AdminAuth->>OIDCServer: GET /api/v2/authorize
    OIDCServer->>AdminAuth: URL d'authentification OIDC
    AdminAuth->>Client: HTTP 302 URL d'authentification OIDC
    Client->>OIDCServer: URL d'authentification OIDC
    OIDCServer->>Client: HTTP 302 vers /api/auth/agent-connect/callback
    Client->>AdminAuth: GET /api/auth/agent-connect/callback
    AdminAuth->>OIDCServer: Validation du code d'authorisation
    OIDCServer->>AdminAuth: Génération d'un access token
    AdminAuth->>OIDCServer: Récupération des infos utilisateurs
    OIDCServer->>AdminAuth: Envoi de l'email de l'utilisateur
    AdminAuth->>AdminAuth: Création du cookie de session de l'utilisateur connecté
    AdminAuth->>Client: HTTP 302 vers https://annuaire-entreprises.data.gouv.fr/restricted-area
    Client->>Nginx: GET https://annuaire-entreprises.data.gouv.fr/restricted-area
    Nginx->>AdminAuth: GET /admin/auth/api
    AdminAuth->>AdminAuth: Validation que l'email de l'utilisateur est autorisé à accéder au service
    AdminAuth->>Nginx: HTTP 200
    Nginx->>RestrictedArea: GET /restricted-area
    RestrictedArea->>Client: HTTP 200
Loading

Variables d'environnement

Variable Default Description
PORT 3000 Port d'écoute
AUTHORIZED_USER_EMAILS CSV Liste des emails ayant accès à la zone protégée (sensible à la casse)
AUTHORIZED_SIRET Lorsque défini : restreint les accès aux seuls utilisateurs dont le SIRET de correspond
IRON_SESSION_PWD Mot de passe de protection du cookie de session (au moins 32 caractères)
OPENID_CLIENT_ID
OPENID_CLIENT_SECRET
OPENID_URL_DISCOVER
OPENID_REDIRECT_URI
OPENID_POST_LOGOUT_REDIRECT_URI
VERIFY_BROWSER_SIGNATURE 1 Déconnecte automatiquement l'utilisateur si son navigateur a changé
VERIFY_IP_ADDRESS 1 Déconnecte automatiquement l'utilisateur si son adresse IP a changée
AUTH_COOKIE_NAME annuaire-entreprises-admin-auth-session Nom du cookie de session
AUTH_COOKIE_DOMAIN localhost @see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#domaindomain-value
AUTH_COOKIE_TTL 3600 @see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#max-agenumber

Makefile

Target Description
npm_install Installation des dépendances NPM
demo_gen_ssl_certificates Génération des certificats SSL auto-signés pour la démo
demo_run Lancement de la stack de démo (nécessite docker compose v2)

Demo

Procédure pour protéger les accès à www.domaine_a_remplacer.fr

  1. Créer le fichier .env à partir de .env.dist
  2. Ajouter dans /etc/hosts : 127.0.0.1 www.domaine_a_remplacer.fr
  3. Exécuter make demo_run
  4. Accédeder à https://www.domaine_a_remplacer.fr

Licence

Le code source de ce dépôt est publié sous licence MIT par la Direction interministérielle du numérique.

About

Authentication for Annuaire Entreprises Admin tools

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published