Модуль ngx_http_auth_jwt_module
- Поддерживаемые алгоритмы
- Пример конфигурации
- Директивы
- auth_jwt
- auth_jwt_claim_set
- auth_jwt_header_set
- auth_jwt_key_cache
- auth_jwt_key_file
- auth_jwt_key_request
- auth_jwt_leeway
- auth_jwt_type
- auth_jwt_require
- Встроенные переменные
Модуль ngx_http_auth_jwt_module (1.11.3) реализует авторизацию клиента путём валидации предоставленного JSON Web Token (JWT) с использованием указанных ключей. Модуль поддерживает JSON Web Signature (JWS), JSON Web Encryption (JWE) (1.19.7) и Nested JWT (1.21.0). Модуль может использоваться для аутентификации OpenID Connect.
Модуль может быть объединён с другими модулями доступа, такими как ngx_http_access_module, ngx_http_auth_basic_module и ngx_http_auth_request_module, через директиву satisfy.
Данный модуль доступен в рамках нашей коммерческой подписки.
Поддерживаемые алгоритмы
Модуль поддерживает следующие JSON Web алгоритмы.
Алгоритмы JWS:
- HS256, HS384, HS512
- RS256, RS384, RS512
- ES256, ES384, ES512
- EdDSA (подписи Ed25519 и Ed448) (1.15.7)
До версии 1.13.7 поддерживались только алгоритмы HS256, RS256, ES256.
Алгоритмы шифрования содержимого JWE (1.19.7):
- A128CBC-HS256, A192CBC-HS384, A256CBC-HS512
- A128GCM, A192GCM, A256GCM
Алгоритмы управления ключами JWE (1.19.9):
- A128KW, A192KW, A256KW
- A128GCMKW, A192GCMKW, A256GCMKW
- dir - прямое использование общего симметричного ключа в качестве ключа шифрования содержимого
- RSA-OAEP, RSA-OAEP-256, RSA-OAEP-384, RSA-OAEP-512 (1.21.0)
Пример конфигурации
location / {
auth_jwt "closed site";
auth_jwt_key_file conf/keys.json;
}
Директивы
| Синтаксис: | auth_jwt
string
[token=$variable] |
off; |
|---|---|
| По умолчанию: | auth_jwt off; |
| Контекст: | http, server, location, limit_except |
Включает валидацию JSON Web Token. Указанный string используется как realm. Значение параметра может содержать переменные.
Необязательный параметр token задаёт переменную, содержащую JSON Web Token. По умолчанию JWT передаётся в заголовке «Authorization» в виде Bearer Token. JWT также может передаваться в виде куки или части строки запроса:
auth_jwt "closed site" token=$cookie_auth_token;
Специальное значение off отменяет действие директивы auth_jwt унаследованной с предыдущего уровня конфигурации.
| Синтаксис: | auth_jwt_claim_set $variable name ...; |
|---|---|
| По умолчанию: | — |
| Контекст: | http |
Данная директива появилась в версии 1.11.10.
Задает variable параметру JWT, идентифицируемому по именам ключей. Сопоставление имён начинается с верхнего уровня JSON-дерева. Для массивов переменная сохраняет список элементов массива, разделённых запятыми.
auth_jwt_claim_set $email info e-mail; auth_jwt_claim_set $job info "job title";
До версии 1.13.7 разрешалось указывать только одно имя ключа, а результат для массивов был неопределён.
Значения переменных для токенов, зашифрованных с помощью JWE, доступны только после дешифрования, которое происходит во время фазы доступа.
| Синтаксис: | auth_jwt_header_set $variable name ...; |
|---|---|
| По умолчанию: | — |
| Контекст: | http |
Данная директива появилась в версии 1.11.10.
Задает variable параметру JOSE, идентифицируемому по именам ключей. Сопоставление имён начинается с верхнего уровня JSON-дерева. Для массивов переменная сохраняет список элементов массива, разделённых запятыми.
До версии 1.13.7 разрешалось указывать только одно имя ключа, а результат для массивов был неопределён.
| Синтаксис: | auth_jwt_key_cache time; |
|---|---|
| Значение по умолчанию: | auth_jwt_key_cache 0; |
| Контекст: | http, server, location |
Данная директива появилась в версии 1.21.4.
Включает или отключает кэширование ключей, полученных из файла file или из подзапроса subrequest, и устанавливает время кэширования. Кэширование ключей, полученных из переменных, не поддерживается. По умолчанию кэширование ключей отключено.
| Синтаксис: | auth_jwt_key_file file; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location, limit_except |
Указывает file в формате JSON Web Key Set для проверки подписи JWT. Значение параметра может содержать переменные.
Несколько директивы auth_jwt_key_file могут быть указаны на одном уровне (1.21.1):
auth_jwt_key_file conf/keys.json; auth_jwt_key_file conf/key.jwk;
Если хотя бы один из указанных ключей не может быть загружен или обработан, nginx вернёт ошибку 500 (Внутренняя ошибка сервера).
| Синтаксис: | auth_jwt_key_request uri; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location, limit_except |
Данная директива появилась в версии 1.15.6.
Разрешает извлечение файла JSON Web Key Set из подзапроса для проверки подписи JWT и устанавливает URI, куда будет отправлен подзапрос. Значение параметра может содержать переменные. Для избежания накладных расходов на проверку рекомендуется кэшировать файл ключей:
proxy_cache_path /data/nginx/cache levels=1 keys_zone=foo:10m;
server {
...
location / {
auth_jwt "closed site";
auth_jwt_key_request /jwks_uri;
}
location = /jwks_uri {
internal;
proxy_cache foo;
proxy_pass http://idp.example.com/keys;
}
}
Несколько директивы auth_jwt_key_request могут быть указаны на одном уровне (1.21.1):
auth_jwt_key_request /jwks_uri; auth_jwt_key_request /jwks2_uri;
Если хотя бы один из указанных ключей не может быть загружен или обработан, nginx вернёт ошибку 500 (Внутренняя ошибка сервера).
| Синтаксис: | auth_jwt_leeway time; |
|---|---|
| Значение по умолчанию: | auth_jwt_leeway 0s; |
| Контекст: | http, server, location |
Данная директива появилась в версии 1.13.10.
Устанавливает максимальное допустимое значение для компенсации смещения часов при проверке JWT-утверждений exp и nbf.
| Синтаксис: | auth_jwt_type signed |
encrypted |
nested; |
|---|---|
| Значение по умолчанию: | auth_jwt_type signed; |
| Контекст: | http, server, location, limit_except |
Данная директива появилась в версии 1.19.7.
Указывает тип ожидаемого JSON Web Token: JWS (signed), JWE (encrypted) или подписанный и затем зашифрованный вложенный JWT (nested) (1.21.0).
| Синтаксис: | auth_jwt_require
$value ...
[error=401 |
403]
; |
|---|---|
| Значение по умолчанию: | — |
| Контекст: | http, server, location, limit_except |
Данная директива появилась в версии 1.21.2.
Указывает дополнительные проверки для валидации JWT. Значение может содержать текст, переменные и их комбинацию и должно начинаться с переменной (1.21.7). Авторизация будет успешной только если все значения не пустые и не равны “0”.
map $jwt_claim_iss $valid_jwt_iss {
"good" 1;
}
...
auth_jwt_require $valid_jwt_iss;
Если какая-либо проверка завершается неудачно, возвращается код ошибки 401. Необязательный параметр error (1.21.7) позволяет переопределить код ошибки на 403.
Встроенные переменные
Модуль ngx_http_auth_jwt_module поддерживает встроенные переменные:
-
$jwt_header_name - возвращает значение указанного JOSE заголовка
-
$jwt_claim_name - возвращает значение указанного JWT утверждения
Для вложенных утверждений и утверждений, содержащих точку (“.”), значение переменной не может быть вычислено; вместо этого следует использовать директиву auth_jwt_claim_set.
Значения переменных для токенов, зашифрованных с помощью JWE, доступны только после дешифрования, которое происходит на стадии Доступ.
$jwt_payload- возвращает дешифрованный верхнеуровневый payload токенов
nestedилиencrypted(1.21.2). Для вложенных токенов возвращает вложенный JWS токен. Для зашифрованных токенов возвращает JSON с утверждениями.
© 2002-2021 Igor Sysoev
© 2011-2024 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/http/ngx_http_auth_jwt_module.html