ngx_http_auth_jwt_module. Это доступно только с NGINX Plus?
Я хотел бы использовать и реализовать этот модуль (ngx-http-auth-jwt-module) в некоторых имеющихся у меня приложениях. Очевидно, это официально доступно только в рамках коммерческой подписки?
Могу ли я получить аналогичную функциональность из модуля с открытым исходным кодом для NGINX или, возможно, вместо этого использовать OpenResty OpenResty с аналогичным модулем? Мне бы очень хотелось обрабатывать JWT непосредственно в NGINX или, возможно, использовать что-то вроде KeyCloak.
Я заметил, что существует репозиторий GitHub для сборки этого или аналогичного модуля?
Какие-либо предложения ?
1 ответ
Мне удалось скомпилировать модуль ngx-http-auth-jwt из репозитория GitHub, о котором я упоминал:
а затем добавил его как динамически загружаемый модуль в свою сборку NGINX в Docker. Немного беспорядочно, поэтому, возможно, лучше использовать что-то вроде OpenResty, но, похоже, это работает. Он проверит токен, а затем, при необходимости, перенаправит на URL-адрес, если токен недействителен, а также множество других функций.
Это требует некоторой настройки, но приятно то, что вы можете устанавливать заголовки для конкретных утверждений в JWT:
например, следующие заголовки устанавливаются в заголовках запроса, поэтому их можно использовать в подзапросе или где-либо еще, и я думаю, что они доступны как $http_jwt_xxx.
"HTTP_JWT_PID": ""
"HTTP_JWT_SID": ""
"HTTP_JWT_SUB" ""
Вы можете сделать то же самое для заголовков ответов, доступных как $sent_http_jwt_xxx. Я не уверен, что вы также можете использовать операторы if или более продвинутую маршрутизацию в блоках местоположения и прокси, но возможно. Похоже, это замена или альтернатива тому, что поставляется с NGINX plus? Кажется, что было бы быстрее и, возможно, немного более элегантно сделать все это на самом сервере NGINX, вместо того, чтобы обязательно всегда выполнять подзапрос.
Вы также можете поместить JWT в заголовок или COOKIE (не уверен насчет строки запроса), что также является приятной функцией:
auth_jwt_location HEADER=auth-token; # get the JWT from the "auth-token" header
auth_jwt_location COOKIE=auth-token; # get the JWT from the "auth-token" cookie
load_module modules/ngx_http_auth_jwt_module.so;
http {
server {
auth_jwt_key "binhex of key if you use that method";
auth_jwt_enabled off;
...
location /proxy/ {
auth_jwt_enabled on;
auth_jwt_redirect on;
auth_jwt_location COOKIE=JWTVIEWER;
auth_jwt_extract_request_claims sub sid pid;
auth_jwt_loginurl "some url";