jwt: Módulo JWT para NGINX
Instalação
Você pode instalar este módulo em qualquer distribuição baseada em RHEL, incluindo, mas não se limitando a:
- RedHat Enterprise Linux 7, 8, 9 e 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 e 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
Habilite o módulo adicionando o seguinte no início do /etc/nginx/nginx.conf:
load_module modules/ngx_http_auth_jwt_module.so;
Este documento descreve o nginx-module-jwt v3.4.6 lançado em 01 de agosto de 2026.
Módulo de autenticação JWT para Nginx
Este é um módulo NGINX para verificar se um JWT é válido. Este módulo tem a intenção de ser o mais leve possível e permanecer simples:
- Imagem Docker baseada no Dockerfile oficial do nginx (alpine).
- Imagem leve (~400KB a mais que a oficial).
Início Rápido:
Imagem Docker:
A imagem é gerada com Github Actions (veja nginx-jwt-module:latest)
docker pull ghcr.io/max-lt/nginx-jwt-module:latest
Uma variante mais leve baseada em nginx:alpine-slim (sem os módulos dinâmicos extras do nginx, como njs, image-filter, xslt ou geoip) também está disponível:
docker pull ghcr.io/max-lt/nginx-jwt-module:latest-slim
Pacotes Pré-compilados (Ubuntu / Debian)
Pacotes pré-compilados para este módulo estão disponíveis gratuitamente no repositório GetPageSpeed:
# Adicione o repositório (exemplo Ubuntu - substitua 'ubuntu' e 'jammy' pela sua distribuição)
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; # Sua chave como string hexadecimal
auth_jwt off;
# O método de autenticação padrão é o cabeçalho "Authentication"
location /secured-by-auth-header/ {
auth_jwt on;
}
# Mas você pode usar um cookie
location /secured-by-cookie/ {
auth_jwt $cookie_MyCookieName;
}
# As chaves JWT são herdadas do nível de configuração anterior
# mas você pode ter chaves diferentes para diferentes locations
location /secured-by-auth-header-too/ {
auth_jwt_key "another-secret"; # Sua chave como string utf8
auth_jwt on;
}
location /secured-by-rsa-key/ {
auth_jwt_key /etc/keys/rsa-public.pem file; # Sua chave de um arquivo PEM
auth_jwt on;
}
location /not-secure/ {}
}
}
Nota: não se esqueça de carregar o módulo no contexto principal:
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
Diretivas:
auth_jwt
Sintaxe: auth_jwt $variable | on | off;
Padrão: auth_jwt off;
Contexto: http, server, location
Habilita a validação de JWT.
O valor auth_jwt $variable pode ser usado para definir uma forma personalizada de obter o JWT, por exemplo, para obtê-lo de um cookie em vez do cabeçalho padrão Authentication: auth_jwt $cookie_MyCookieName;
auth_jwt_key
Sintaxe: auth_jwt_key value [encoding];
Padrão: ——
Contexto: http, server, location
Especifica a chave para validar a assinatura do JWT (deve ser hexadecimal).
A opção encoding pode ser hex | utf8 | base64 | file (o padrão é utf8).
A opção file requer que o value seja um caminho de arquivo válido (apontando para uma chave codificada em PEM).
auth_jwt_alg
Sintaxe: auth_jwt_alg any | HS256 | HS384 | HS512 | RS256 | RS384 | RS512 | ES256 | ES384 | ES512;
Padrão: auth_jwt_alg any;
Contexto: http, server, location
Especifica qual algoritmo o servidor espera receber no JWT.
Tokens assinados com um algoritmo HMAC (HS256, HS384, HS512) são sempre rejeitados quando a chave é uma chave PEM,
independentemente do valor desta diretiva: uma chave pública não é um segredo, então qualquer pessoa poderia usá-la para
assinar um token que o servidor aceitaria. Fixar o algoritmo esperado ainda é recomendado.
auth_jwt_require
Sintaxe: auth_jwt_require $value ... [error=401 | 403];
Padrão: ——
Contexto: http, server, location
Especifica verificações adicionais para a validação do JWT. A autenticação só será bem-sucedida se todos os valores não estiverem vazios e não forem iguais a "0".
Estas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas auth_jwt_require definidas no nível atual.
Se qualquer uma das verificações falhar, o código de erro 401 é retornado. O parâmetro opcional error permite redefinir o código de erro para 403.
Exemplo:
# 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;
# ...
}
}
Observe que como
$jwt_claim_retorna um valor codificado em JSON, temos que verificar\"value\"(e nãovalue)
Variáveis Incorporadas:
O módulo ngx_http_auth_jwt_module suporta variáveis incorporadas:
- $jwtheadernome retorna o valor do cabeçalho especificado
- $jwtclaimnome retorna o valor da claim especificada
- $jwt_headers retorna os cabeçalhos
- $jwt_payload retorna o payload
Observe que como todos os valores retornados são codificados em JSON, as strings serão cercadas pelo caractere
"
Estenda Sua Imagem Docker:
Simplesmente crie sua imagem a partir da imagem gerada pelo Github
FROM ghcr.io/max-lt/nginx-jwt-module:latest
# Copie sua configuração do nginx
# Não se esqueça de incluir este módulo na sua configuração
# 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 use a imagem fornecida diretamente
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 .
### Teste:
#### Uso padrão:
```bash
make test # Irá compilar uma imagem de teste e executar a suíte de testes
Exemplos de configuração:
Nesta seção, veremos alguns exemplos de como usar este módulo.
Redirecionar para a página de login se o JWT for inválido:
load_module /usr/lib/nginx/modules/ngx_http_auth_jwt_module.so;
# ...
http {
server {
listen 80;
server_name _;
auth_jwt_key "0123456789abcdef" hex; # Sua chave como string hexadecimal
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";
}
}
}
Tentar curl -i http://localhost/secure/path?param=value retornará um redirecionamento 302 para /login?redirect=/secure/path?param=value se o JWT for inválido.
GitHub
Você pode encontrar dicas de configuração adicionais e documentação para este módulo no repositório GitHub do nginx-module-jwt.