Скрытие ключей с помощью приложения Wildfly за обратным прокси-сервером Nginx

#nginx #proxy #keycloak

#nginx #прокси #скрытие ключей

Вопрос:

AWS EC2 Ubuntu 18.04 Keycloak 5.0.0 Nginx 1.15.8

Я пытаюсь разместить приложение (не мою разработку) на основе Wildfly с интеграцией скрытого ключа (OpenID-connect) и знаю о сообщениях, которые относятся к моей задаче, но я полагаю, что мой вопрос не был рассмотрен в этих сообщениях.

В моем случае все работает нормально, приложение и сервер скрытия ключей за обратным прокси-сервером Nginx. Чего я не могу понять, так это того, что в соответствии с этим документом по скрытому ключу необходимо внести следующие изменения в скрытый ключ standalone.xml (в моем случае):

 <http-listener name="default" socket-binding="http" proxy-address-forwarding="true" redirect-socket="proxy-https"/>

<socket-binding name="proxy-https" port="443"/>
  

Если я правильно понимаю, эта настройка предполагает, что приложение отправляет запрос на аутентификацию http-прослушивателю, и он перенаправляется на прокси-https. Не совсем ясно, куда прокси должен отправлять свой proxy_pass.

Но в любом случае, в моем случае приложение отправляет запрос на аутентификацию следующим образом:

        <realm>MyRealm</realm>
        <resource>MyRealm</resource>
        <public-client>true</public-client>
        <auth-server-url>https://<host name>:8843/auth/</auth-server-url>
        <ssl-required>external</ssl-required>
  

Я только что изменил порт https в скрытии ключей stanalone.xml на 8943 и присвоил серверу Nginx порт 8843 с указанием местоположения /auth/ , как в этом фрагменте:

 server {

    listen 192.168.80.40:8843 ssl http2 default_server;
    server_name <host name>;

    location /auth/ {


           proxy_http_version 1.1;


           proxy_set_header        Host               $http_host;
           proxy_set_header        X-Forwarded-For    $proxy_add_x_forwarded_for;
           proxy_set_header        X-Real-IP          $remote_addr;
           proxy_set_header        X-Forwarded-Proto  $scheme;
           proxy_set_header        X-Forwarded-Port   8843;
           add_header              Strict-Transport-Security "max-age=15552000";

           proxy_set_header X-NginX-Proxy true;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";

           proxy_pass  https://192.168.80.40:8943/auth/;
           proxy_redirect     off;

    }

  }
  

Это работает, но я не совсем уверен, что это правильный способ разместить сервер скрытия ключей за обратным прокси-сервером Nginx, учитывая вышеупомянутую статью о скрытии ключей. По сути, это вопрос не о чем-то, что не работает, а о том, почему это работает.

Если некоторые эксперты по скрытию ключей могут заверить меня, что моя настройка работоспособна, я был бы очень признателен.

Мой второй вопрос: возможно ли ограничить внешний доступ только к области приложений, если пользователи решат открыть:

 https://<host name>:<port>/auth
  

Я хотел бы заблокировать любой внешний доступ к экрану входа в основную область.

Когда я использую /auth/realms/MyRealm/ в расположении Nginx, это не позволяет пользователям получать доступ к экрану входа в основную область, но он показывает просто какой-то уродливый экран входа в область приложений, который на самом деле работает, но выглядит непрофессионально.

Заранее спасибо.

Обновить:

Единственное решение для моего второго вопроса, которое я нашел до сих пор:

    location /auth/realms/master/ {

   proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

   proxy_http_version 1.1;


   proxy_set_header        Host               $http_host;
   proxy_set_header        X-Forwarded-For    $proxy_add_x_forwarded_for;
   proxy_set_header        X-Real-IP          $remote_addr;
   proxy_set_header        X-Forwarded-Proto  $scheme;
   proxy_set_header        X-Forwarded-Port   8843;
   add_header              Strict-Transport-Security "max-age=15552000";

   proxy_set_header X-NginX-Proxy true;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";

   add_header Pragma "no-cache";

   proxy_pass  https://192.168.80.40:8943/auth/realms/master/;
   proxy_redirect     off;

   allow X.X.X.X;
   deny all;
  

}

И аналогично для корневого расположения:

        location / {

           *
           *
           *

       proxy_pass  https://192.168.80.40:8943$request_uri;
       proxy_redirect     off;

       allow X.X.X.X;
       deny all;

}
  

Местоположение /auth/ не изменено.

https://<host name>:<port>/auth по-прежнему открывается "Welcome to Keycloak" экран, но доступ к "Administration Console" запрещен. По крайней мере, теперь у меня есть обычный экран входа в систему для области приложений, и мошеннические пользователи Интернета никуда не денутся с этого экрана приветствия.

Мне все еще нужна помощь с моим первым вопросом.

Комментарии:

1. Вы нашли какое-либо решение? У меня тот же сценарий, и я ищу, как установить блокировку ключей с помощью прокси-сервера Nginx с ограниченным доступом к основной области.

2. Вы также можете заблокировать доступ к самой странице /auth/, предоставив аналогичное правило nginx для ‘location = /auth/’