Nginx反向代理后面具有Wildfly应用程序的Keycloak

时间:2019-04-08 17:25:14

标签: nginx proxy keycloak

AWS EC2 Ubuntu 18.04 Keycloak 5.0.0 Nginx 1.15.8

我正在尝试基于具有Keycloak集成(openid-connect)的Wildfly的应用程序(而不是我的开发),并且知道与我的任务相关的帖子,但是我认为这些问题并未涵盖我的问题。帖子。

就我而言,一切正常,一个应用程序和一个Nginx反向代理后面的keycloak服务器。我无法理解的是,根据this Keycloak文档,有必要在keycloak standalone.xml中进行以下更改(对于我而言):

Scaffold(
  resizeToAvoidBottomInset: false,
  ...
);

如果我正确理解,则此设置假定应用程序将身份验证请求发送到http-listener,并将其重定向到proxy-https。还不清楚代理应该在哪里发送其proxy_pass。

但是无论如何,就我而言,应用程序通过以下方式发送身份验证请求:

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

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

我刚刚将Keycloak stanalone.xml中的https端口更改为8943,并将端口8843分配给了位置为 <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> 的Nginx服务器,如以下片段所示:

/auth/

它可以工作,但是考虑到上面提到的Keycloak文章,我不确定是将Keycloak服务器放置在Nginx反向代理后面的正确方法。基本上,这不是问题,不是问题,而是为什么起作用。

如果一些Keycloak专家可以向我保证我的设置可行,那么我将不胜感激。

我的第二个问题: 如果用户决定打开,是否可以仅限制对应用程序领域的外部访问:

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/

}

与根位置类似:

   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"。至少,我现在有一个用于应用程序领域的常规登录屏幕,并且流氓Internet人士从该“欢迎”屏幕上走了不到。

我的第一个问题仍然需要帮助。

0 个答案:

没有答案