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.
Ce dépôt fait partie d'un ensemble de services qui constituent l'Annuaire des Entreprises.
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 |
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
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 |
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) |
Procédure pour protéger les accès à www.domaine_a_remplacer.fr
- Créer le fichier
.env
à partir de.env.dist
- Ajouter dans
/etc/hosts
:127.0.0.1 www.domaine_a_remplacer.fr
- Exécuter
make demo_run
- Accédeder à
https://www.domaine_a_remplacer.fr
Le code source de ce dépôt est publié sous licence MIT par la Direction interministérielle du numérique.