Перенаправление NiFi Azure AD OAuth Запрос usinig NGINX - PullRequest
1 голос
/ 07 июня 2019

Я затягиваю это уже довольно много дней и не могу найти решение. Мы развернули 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;
            }
        }
    }
}
...