jwt: NGINX JWT-Modul
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und 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
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_auth_jwt_module.so;
Dieses Dokument beschreibt nginx-module-jwt v3.4.4 veröffentlicht am 03. Februar 2026.
Nginx jwt auth Modul
Dies ist ein NGINX-Modul zur Überprüfung eines gültigen JWT. Dieses Modul soll so leicht wie möglich und einfach bleiben:
- Docker-Image basierend auf dem offiziellen nginx Dockerfile (alpine).
- Leichtes Image (~400KB mehr als das offizielle).
Schnellstart:
Docker-Image:
Das Image wird mit Github Actions generiert (siehe nginx-jwt-module:latest)
docker pull ghcr.io/max-lt/nginx-jwt-module:latest
Vorgefertigte Pakete (Ubuntu / Debian)
Vorgefertigte Pakete für dieses Modul sind kostenlos im GetPageSpeed-Repository verfügbar:
# Fügen Sie das Repository hinzu (Ubuntu-Beispiel - ersetzen Sie 'ubuntu' und 'jammy' durch Ihre 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; # Ihr Schlüssel als hexadezimale Zeichenfolge
auth_jwt off;
# Die Standard-Authentifizierungsmethode ist der "Authentication"-Header
location /secured-by-auth-header/ {
auth_jwt on;
}
# Aber Sie können stattdessen ein Cookie verwenden
location /secured-by-cookie/ {
auth_jwt $cookie_MyCookieName;
}
# JWT-Schlüssel werden vom vorherigen Konfigurationslevel geerbt
# aber Sie können unterschiedliche Schlüssel für verschiedene Standorte haben
location /secured-by-auth-header-too/ {
auth_jwt_key "another-secret"; # Ihr Schlüssel als utf8-Zeichenfolge
auth_jwt on;
}
location /secured-by-rsa-key/ {
auth_jwt_key /etc/keys/rsa-public.pem file; # Ihr Schlüssel aus einer PEM-Datei
auth_jwt on;
}
location /not-secure/ {}
}
}
Hinweis: Vergessen Sie nicht, das Modul im Hauptkontext zu laden:
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
Direktiven:
auth_jwt
Syntax: auth_jwt $variable | on | off;
Standard: auth_jwt off;
Kontext: http, server, location
Aktiviert die Validierung von JWT.
Der Wert auth_jwt $variable kann verwendet werden, um eine benutzerdefinierte Methode zum Abrufen des JWT festzulegen, z. B. um es aus einem Cookie anstelle des Standard-Authentication-Headers abzurufen: auth_jwt $cookie_MyCookieName;
auth_jwt_key
Syntax: auth_jwt_key value [encoding];
Standard: ——
Kontext: http, server, location
Gibt den Schlüssel zur Validierung der JWT-Signatur an (muss hexadezimal sein).
Die encoding-Option kann hex | utf8 | base64 | file sein (Standard ist utf8).
Die file-Option erfordert, dass der value ein gültiger Dateipfad ist (der auf einen PEM-kodierten Schlüssel verweist).
auth_jwt_alg
Syntax: auth_jwt_alg any | HS256 | HS384 | HS512 | RS256 | RS384 | RS512 | ES256 | ES384 | ES512;
Standard: auth_jwt_alg any;
Kontext: http, server, location
Gibt an, welchen Algorithmus der Server erwartet, um ihn im JWT zu erhalten.
auth_jwt_require
Syntax: auth_jwt_require $value ... [error=401 | 403];
Standard: ——
Kontext: http, server, location
Gibt zusätzliche Überprüfungen für die JWT-Validierung an. Die Authentifizierung wird nur erfolgreich sein, wenn alle Werte nicht leer sind und nicht gleich "0".
Diese Direktiven werden vom vorherigen Konfigurationslevel geerbt, wenn und nur wenn auf der aktuellen Ebene keine auth_jwt_require-Direktiven definiert sind.
Wenn eine der Überprüfungen fehlschlägt, wird der Fehlercode 401 zurückgegeben. Der optionale Fehlerparameter ermöglicht es, den Fehlercode auf 403 neu zu definieren.
Beispiel:
# 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;
# ...
}
}
Beachten Sie, dass
$jwt_claim_einen JSON-kodierten Wert zurückgibt, sodass wir\"value\"(und nichtvalue) überprüfen müssen.
Eingebettete Variablen:
Das ngx_http_auth_jwt_module-Modul unterstützt eingebettete Variablen:
- $jwtheadername gibt den angegebenen Headerwert zurück
- $jwtclaimname gibt den angegebenen Anspruchswert zurück
- $jwt_headers gibt Header zurück
- $jwt_payload gibt Payload zurück
Beachten Sie, dass alle zurückgegebenen Werte JSON-kodiert sind, sodass Zeichenfolgen von dem
"-Zeichen umgeben sind.
Erweitern Sie Ihr Docker-Image:
Erstellen Sie einfach Ihr Image aus dem von Github generierten
FROM ghcr.io/max-lt/nginx-jwt-module:latest
# Kopieren Sie Ihre nginx-Konfiguration
# Vergessen Sie nicht, dieses Modul in Ihrer Konfiguration einzuschließen
# 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;"]
Oder verwenden Sie das bereitgestellte direkt
docker run -p 80:80 \
-v ./nginx.conf:/etc/nginx/nginx.conf \
ghcr.io/max-lt/nginx-jwt-module
oder
docker build -f Dockerfile -t jwt-nginx .
### Test:
#### Standardnutzung:
```bash
make test # Wird ein Test-Image erstellen und die Test-Suite ausführen
Beispielkonfigurationen:
In diesem Abschnitt werden einige Beispiele gezeigt, wie Sie dieses Modul verwenden können.
Umleitung zur Anmeldeseite, wenn JWT ungültig ist:
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
# ...
http {
server {
listen 80;
server_name _;
auth_jwt_key "0123456789abcdef" hex; # Ihr Schlüssel als hexadezimale Zeichenfolge
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";
}
}
}
Ein Versuch von curl -i http://localhost/secure/path?param=value wird eine 302-Umleitung zu /login?redirect=/secure/path?param=value zurückgeben, wenn das JWT ungültig ist.
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-jwt.