jwt: Module JWT NGINX
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-jwt
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-jwt
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_http_auth_jwt_module.so;
Ce document décrit nginx-module-jwt v3.4.4 publié le 3 février 2026.
Module d'authentification jwt Nginx
Ceci est un module NGINX pour vérifier un JWT valide, ce module vise à être aussi léger que possible et à rester simple :
- Image Docker basée sur le Dockerfile nginx officiel (alpine).
- Image légère (~400 Ko de plus que l'officielle).
Démarrage rapide :
Image Docker :
L'image est générée avec les actions Github (voir nginx-jwt-module:latest)
docker pull ghcr.io/max-lt/nginx-jwt-module:latest
Paquets préconstruits (Ubuntu / Debian)
Des paquets préconstruits pour ce module sont disponibles gratuitement depuis le dépôt GetPageSpeed :
# Ajoutez le dépôt (exemple Ubuntu - remplacez 'ubuntu' et 'jammy' par votre distribution)
echo "deb [signed-by=/etc/apt/keyrings/getpagespeed.gpg] https://extras.getpagespeed.com/ubuntu jammy main" \
| sudo tee /etc/apt/sources.list.d/getpagespeed-extras.list
# nginx.conf
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
http {
server {
auth_jwt_key "0123456789abcdef" hex; # Votre clé en chaîne hexadécimale
auth_jwt off;
# La méthode d'authentification par défaut est l'en-tête "Authentication"
location /secured-by-auth-header/ {
auth_jwt on;
}
# Mais vous pouvez utiliser un cookie à la place
location /secured-by-cookie/ {
auth_jwt $cookie_MyCookieName;
}
# Les clés JWT sont héritées du niveau de configuration précédent
# mais vous pouvez avoir des clés différentes pour différentes localisations
location /secured-by-auth-header-too/ {
auth_jwt_key "another-secret"; # Votre clé en chaîne utf8
auth_jwt on;
}
location /secured-by-rsa-key/ {
auth_jwt_key /etc/keys/rsa-public.pem file; # Votre clé depuis un fichier PEM
auth_jwt on;
}
location /not-secure/ {}
}
}
Remarque : n'oubliez pas de charger le module dans le contexte principal :
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
Directives :
auth_jwt
Syntaxe : auth_jwt $variable | on | off;
Par défaut : auth_jwt off;
Contexte : http, serveur, localisation
Active la validation du JWT.
La valeur auth_jwt $variable peut être utilisée pour définir une manière personnalisée d'obtenir le JWT, par exemple pour l'obtenir à partir d'un cookie au lieu de l'en-tête Authentication par défaut : auth_jwt $cookie_MyCookieName;
auth_jwt_key
Syntaxe : auth_jwt_key value [encoding];
Par défaut : ——
Contexte : http, serveur, localisation
Spécifie la clé pour valider la signature JWT (doit être hexadécimale).
L'option encoding peut être hex | utf8 | base64 | file (la valeur par défaut est utf8).
L'option file nécessite que la value soit un chemin de fichier valide (pointant vers une clé encodée en PEM).
auth_jwt_alg
Syntaxe : auth_jwt_alg any | HS256 | HS384 | HS512 | RS256 | RS384 | RS512 | ES256 | ES384 | ES512;
Par défaut : auth_jwt_alg any;
Contexte : http, serveur, localisation
Spécifie quel algorithme le serveur s'attend à recevoir dans le JWT.
auth_jwt_require
Syntaxe : auth_jwt_require $value ... [error=401 | 403];
Par défaut : ——
Contexte : http, serveur, localisation
Spécifie des vérifications supplémentaires pour la validation du JWT. L'authentification réussira uniquement si toutes les valeurs ne sont pas vides et ne sont pas égales à "0".
Ces directives sont héritées du niveau de configuration précédent uniquement s'il n'y a pas de directives auth_jwt_require définies au niveau actuel.
Si l'une des vérifications échoue, le code d'erreur 401 est renvoyé. Le paramètre d'erreur optionnel permet de redéfinir le code d'erreur à 403.
Exemple :
# server.conf
map $jwt_claim_role $jwt_has_admin_role {
\"admin\" 1;
}
map $jwt_claim_scope $jwt_has_restricted_scope {
\"restricted\" 1;
}
server {
# ...
location /auth-require {
auth_jwt_require $jwt_has_admin_role error=403;
# ...
}
location /auth-compound-require {
auth_jwt_require $jwt_has_admin_role $jwt_has_restricted_scope error=403;
# ...
}
}
Notez que comme
$jwt_claim_renvoie une valeur encodée en JSON, nous devons vérifier\"value\"(et nonvalue)
Variables intégrées :
Le module ngx_http_auth_jwt_module prend en charge les variables intégrées :
- $jwtheadername renvoie la valeur de l'en-tête spécifié
- $jwtclaimname renvoie la valeur de la revendication spécifiée
- $jwt_headers renvoie les en-têtes
- $jwt_payload renvoie la charge utile
Notez que comme toutes les valeurs renvoyées sont encodées en JSON, les chaînes seront entourées par le caractère
"
Étendre votre image Docker :
Créez simplement votre image à partir de celle générée par Github
FROM ghcr.io/max-lt/nginx-jwt-module:latest
# Copiez votre configuration nginx
# N'oubliez pas d'inclure ce module dans votre configuration
# load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
COPY my-nginx-conf /etc/nginx
EXPOSE 8000
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]
Ou utilisez directement celle fournie
docker run -p 80:80 \
-v ./nginx.conf:/etc/nginx/nginx.conf \
ghcr.io/max-lt/nginx-jwt-module
ou
docker build -f Dockerfile -t jwt-nginx .
### Test :
#### Utilisation par défaut :
```bash
make test # Va construire une image de test et exécuter la suite de tests
Exemples de configurations :
Dans cette section, nous allons voir quelques exemples de la façon d'utiliser ce module.
Rediriger vers la page de connexion si le JWT est invalide :
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
# ...
http {
server {
listen 80;
server_name _;
auth_jwt_key "0123456789abcdef" hex; # Votre clé en chaîne hexadécimale
auth_jwt off;
location @login_err_redirect {
return 302 $scheme://$host:$server_port/login?redirect=$request_uri;
}
location /secure/ {
auth_jwt on;
error_page 401 = @login_err_redirect;
}
location / {
return 200 "OK";
}
}
}
Essayer curl -i http://localhost/secure/path?param=value renverra une redirection 302 vers /login?redirect=/secure/path?param=value si le JWT est invalide.
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-jwt.