Я затягиваю это уже довольно много дней и не могу найти решение. Мы развернули NiFi на пограничном узле кластера HDInsight, который поставляется с предустановленной NGINX (бесплатной). Мы установили NiFi на этот узел и имели базовый, незащищенный интерфейс NiFi, обслуживаемый NGINX. Все идет нормально.
Требование заключается в том, чтобы защищать NiFi с помощью Azure AD, и это вызывает у меня проблемы. Проблема в том, что независимо от того, что я пытаюсь, я не могу настроить NGINX таким образом, чтобы он перенаправлял запрос OAuth от NiFi на https://login.microsoftonline.com.. Самое близкое, что я получил, - это перенаправление в нужный домен и включение строки запроса. , но отсутствует часть местоположения URL (идентификатор клиента AD), что означает, что аутентификация не удалась.
Итак, мой вопрос: как я могу настроить NGINX для правильного перенаправления запроса OAuth? Я либо могу получить:
https://login.microsoftonline.com/?client_id=<ID>&response_type=code&scope=openid+email&state=4bibmlfesmgbmi9o1p8blibd4q&redirect_uri=https%3A%2F%2F<NODE HOSTNAME>%3A443%2Fnifi-api%2Faccess%2Foidc%2Fcallback
или
https://<NODE HOSTNAME>/<TENANT ID>/oauth2/v2.0/authorize?client_id=<ID>&response_type=code&scope=openid+email&state=4bibmlfesmgbmi9o1p8blibd4q&redirect_uri=https%3A%2F%2Fems-poc-tri-hdi-nfi.apps.azurehdinsight.net%3A443%2Fnifi-api%2Faccess%2Foidc%2Fcallback
Я не могу получить:
https://login.microsoftonline.com/<TENANT ID>/oauth2/v2.0/authorize?client_id=<ID>&response_type=code&scope=openid+email&state=4bibmlfesmgbmi9o1p8blibd4q&redirect_uri=https%3A%2F%2Fems-poc-tri-hdi-nfi.apps.azurehdinsight.net%3A443%2Fnifi-api%2Faccess%2Foidc%2Fcallback
Я пробовал все виды, но мне наконец-то пришлось признать свое поражение. Текущая конфигурация NGINX приведена ниже:
user www-data;
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 768;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
server_names_hash_bucket_size 1024;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log notice;
rewrite_log on;
##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#upstream nifi {
# server 10.1.0.10:9443;
# keepalive 512;
#}
server
{
listen 443 default_server;
#server_name localhost;
server_name ems-poc-tri-hdi-nfi.apps.azurehdinsight.net;
proxy_set_header X-ProxyHost ems-poc-tri-hdi-nfi.apps.azurehdinsight.net;
proxy_set_header X-ProxyScheme https;
proxy_set_header X-ProxyPort 443;
location = / {
return 301 https://10.1.0.10:9443/nifi;
}
location /nifi {
proxy_pass https://10.1.0.10:9443/nifi;
}
location /nifi-api {
proxy_pass https://10.1.0.10:9443/nifi-api;
}
location ~ "\/<AAD TENANT ID>" {
access_log /var/log/nginx/special.access.log;
proxy_set_header Host login.microsoftonline.com;
add_header X-uri "$uri";
add_header X-host "$host";
add_header X-request_uri "$request_uri";
add_header X-args "$args";
if ($request_uri ~ "/[^?]+\?[^?]+callback$") {
#return 307 https://login.microsoftonline.com$uri?$args&redirect=true;
#rewrite ^(?<location>/[^?]+) $location redirect;
#rewrite ^(?<location>/[^?]+) https://login.microsoftonline.com$location redirect;
rewrite ^ $scheme://login.microsoftonline.com$uri?$args&redirect=true? last;
}
if ($request_uri ~ "/[^?]+\?[^?]+true$") {
# proxy_pass https://login.microsoftonline.com;
rewrite ^ https://login.microsoftonline.com last;
#return 307 https://login.microsoftonline.com$uri?$args;
}
}
}
}