【问题标题】:Keycloak Redirect url with nginx is going to http rather than https使用 nginx 的 Keycloak 重定向 url 将转到 http 而不是 https
【发布时间】:2018-09-12 18:03:39
【问题描述】:

Keycloak 正在使用带有 nginx 配置的反向代理,以便在 ssl(https) 中可用。 现在我已经在 ubuntu 中部署了 .net 核心应用程序。 此应用程序位于 http 中,并使用 keycloak 作为 openid 连接进行身份验证。

但是,当应用程序使用 nginx 在 https 中托管时,keycloak 会显示无效的重定向 url 而不是登录页面。 Keycloak 登录 url 页面包含带有 http 而不是 https 的 redirect_uri 参数。请帮忙解决 在 nginx 的配置文件中完成反向代理的配置

server {

 listen 443  ssl;

 server_name  abc.ctech.com;

 ssl_certificate /etc/nginx/external/wildcard_ctech_com.pem;

 ssl_certificate_key /etc/nginx/external/private.rsa;


location / {


   proxy_http_version 1.1;

   proxy_set_header Host abc.ctech.com; 

  proxy_set_header X-Real-IP $remote_addr;

   proxy_set_header X-Forwarded-Proto https;

   proxy_set_header X-Forwarded-Port 443;

   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  

proxy_pass http://172.30.5.28:8001; 


  }

}

#Keycloak Service
server {

  listen 443  ssl;

  server_name  keycloak.ctech.com; 

 ssl_certificate /etc/nginx/external/wildcard_ctech_com.pem;

  ssl_certificate_key /etc/nginx/external/private.rsa;

location = / {

  return 301 https://keycloak.ctech.com/auth;
} 

location /auth {

  proxy_pass http://172.30.5.28:8080/auth;

  proxy_http_version 1.1;

  proxy_set_header Host keycloak.ctech.com;  

  proxy_set_header X-Real-IP $remote_addr;

  proxy_set_header X-Forwarded-Proto https;

  proxy_set_header X-Forwarded-Port 443;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  }
}

【问题讨论】:

    标签: nginx jboss


    【解决方案1】:

    我已经在 docker swarm 模式下与集群 keycloak 斗争了很长时间。 Ubunter's answer 与文档中的相同,但这样做仍然没有为我解决问题。

    要使其与当前的jboss/keycloak:latest docker 映像 (:9.0.3) 一起工作,我必须使用环境变量 KEYCLOAK_FRONTEND_URL

    在添加之前,它仍然不断向主/auth/js/keycloak.js?version=czy98 javascript 发出http URL:

    ...
        <!-- Libraries not managed by yarn -->
        <script src="/auth/resources/czy98/admin/keycloak/lib/angular/ui-bootstrap-tpls-0.11.0.js"></script>
        <script src="/auth/resources/czy98/admin/keycloak/lib/angular/treeview/angular.treeview.js"></script>
        <script src="/auth/resources/czy98/admin/keycloak/lib/fileupload/angular-file-upload.min.js"></script>
        <script src="/auth/resources/czy98/admin/keycloak/lib/filesaver/FileSaver.js"></script>
        <script src="/auth/resources/czy98/admin/keycloak/lib/ui-ace/min/ace.js"></script>
        <script src="/auth/resources/czy98/admin/keycloak/lib/ui-ace/ui-ace.min.js"></script>
    
        <script src="http://my.server.name.here/auth/js/keycloak.js?version=czy98" type="text/javascript"
    ></script>
    
        <script src="/auth/resources/czy98/admin/keycloak/js/app.js" type="text/javascript"></script>
        <script src="/auth/resources/czy98/admin/keycloak/js/controllers/realm.js" type="text/javascript"></scr
    ipt>
        <script src="/auth/resources/czy98/admin/keycloak/js/controllers/clients.js" type="text/javascript"></s
    cript>
        <script src="/auth/resources/czy98/admin/keycloak/js/controllers/users.js" type="text/javascript"></scr
    ipt>
        <script src="/auth/resources/czy98/admin/keycloak/js/controllers/groups.js" type="text/javascript"></sc
    ript>
        <script src="/auth/resources/czy98/admin/keycloak/js/controllers/roles.js" type="text/javascript"></scr
    ipt>
        <script src="/auth/resources/czy98/admin/keycloak/js/loaders.js" type="text/javascript"></script>
        <script src="/auth/resources/czy98/admin/keycloak/js/services.js" type="text/javascript"></script>
    ...
    

    它还在内联javascript中生成http:

        <script type="text/javascript">
            var authServerUrl = 'http://my.server.name.here/auth';
            var authUrl = 'http://my.server.name.here/auth';
            var consoleBaseUrl = '/auth/admin/master/console/';
            var resourceUrl = '/auth/resources/czy98/admin/keycloak';
            var masterRealm = 'master';
            var resourceVersion = 'czy98';
        </script>
    

    尽管X-Forwarded-Proto: httpsstandalone-ha.xml 中的其他必需内容

    【讨论】:

    • 谢谢,它解决了我在访问领域管理控制台时遇到的问题,尽管仍然 100% 不正确,所以如果请求 没有最后一个斜杠 / 它仍然返回错误的方案/端口 @987654329 @8000 是 nginx 监听来自 Network LB 的请求的端口。
    【解决方案2】:

    您需要代理传递给https://keycloak_address:8443/auth;。确保您打开了该端口。下面的代码对我有用。

    server {
        listen 80;
        server_name example.com;
        server_tokens off;
    
        location /.well-known/acme-challenge/ {
            root /var/www/certbot;
        }
    
        location / {
            return 301 https://$server_name$request_uri;
        }
    }
    
    server {
        listen 443 ssl;
        server_name example.com;
        server_tokens off;
    
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    
    
        location /auth {
                    proxy_pass  https://keycloak_address:8443/auth;
                    proxy_set_header    Host                $http_host;
                    proxy_set_header    X-Real-IP           $remote_addr;
                    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
        }
    }
    

    【讨论】:

      【解决方案3】:

      我认为问题在于 KEYCLOAK 文件配置。您应该在 http_listener 中添加以下参数:

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

      并添加 socket-binding-group

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

      【讨论】:

        【解决方案4】:

        我相信您还必须添加一个侦听端口 80 (http) 的服务器块,该块将永久 (301) 重定向到同一服务器的端口 443 (https) 版本。..

        类似于以下内容...(这两个地方都适用)

        server {
            listen 80;
            server_name example.com;
            return 301 https://$server_name$request_uri;
        }
        

        因此,您需要在这两个地方添加一个永久重定向,将(当然)example.com 替换为您的实际服务器名称。

        请告诉我们,谢谢。

        【讨论】:

          【解决方案5】:

          对于那些使用jwilder/nginx-proxy的人,可以让反向代理处理https并添加

            - PROXY_ADDRESS_FORWARDING=true
            - VIRTUAL_HOST= /**domain or subdomain**/
            - VIRTUAL_PORT=8080
          

          到您的 keycloak 环境参数

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-29
            • 2018-01-05
            • 1970-01-01
            • 2014-08-14
            • 1970-01-01
            相关资源
            最近更新 更多