使用 nginx 的 Keycloak 重定向 url 将转到 http 而不是 https

Atu*_*air 8 jboss nginx

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;

  }
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*nco 7

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

为了使其与当前的jboss/keycloak:latestdocker 映像一起工作,我必须做:9.0.3的就是使用环境变量KEYCLOAK_FRONTEND_URL

在添加之前,它仍然不断向主/auth/js/keycloak.js?version=czy98JavaScript 发出 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>
...
Run Code Online (Sandbox Code Playgroud)

它还在内联 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>
Run Code Online (Sandbox Code Playgroud)

尽管X-Forwarded-Proto: https和其他要求的事情standalone-ha.xml


Old*_*art 0

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

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

server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

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

请告诉我们,谢谢。