由于 Keycloak 默认登录重定向而导致混合内容错误

Alt*_*ğlu 10 spring openshift keycloak

所需信息:

我在 Spring 项目后面使用 Keycloak(Docker 版本)。

(该项目的客户端是React,客户端和后端之间的通信由REST服务提供。)

客户端是安全的并使用“https”方案。

这是我的 Spring 配置:

  keycloak:
     auth-server-url: https://sso-ssoha.b9ad.pro-us-east-1.openshiftapps.com/auth
     realm: master
     resource: clientname
     public-client: true
Run Code Online (Sandbox Code Playgroud)

问题的根源:

当我点击客户端的链接时,它会正常调用 Spring 服务。但在此之前,它会重定向到 Keycloak 的默认登录页面,并将此路径sso/login添加到当前的“https”url,但将方案更改为“http”。

但是,从 https 重定向到 http 会产生如下问题:

Mixed Content: The page at 'https://www.helpful.army/contents/Problem' was loaded over HTTPS, but requested an insecure resource 'http://serviceha-helpfularmy.b9ad.pro-us-east-1.openshiftapps.com/sso/login'. This request has been blocked; the content must be served over HTTPS.
Run Code Online (Sandbox Code Playgroud)

syo*_*syo 5

看来我们需要让 keycloak Web 服务器知道我们正在使用代理,https://serverfault.com/questions/1000567/keycloak-blank-page-behind-nginx-reverse-proxy,在设置 PROXY_ADDRESS_FORWARDING 变量后,它就可以工作。


Alt*_*ğlu 1

我已经通过以下步骤解决了这个问题和类似的问题:

(1) 前端侧:

你知道,www.helpful.army是一个教育项目,它有一个在 React 上运行的界面,并且位于 NGINX 服务器中。因此,我在默认 NGINX 服务器配置中附加了强制标头:

location / {
        try_files $uri /index.html;
        proxy_set_header X-Forwarded-Proto $scheme;
        **add_header Access-Control-Allow-Origin *;**

    }
Run Code Online (Sandbox Code Playgroud)

(2) 后端:

我在 Keycloak 上为 Spring-Boot 后端创建了一个不同的客户端,并将其设置为“仅承载”客户端。

keycloak:
 auth-server-url: https://sso-ssoha.b9ad.pro-us-east-1.openshiftapps.com/auth
 realm: master
 resource: serviceha
 bearer-only: true
 ssl-required: "external"
 confidential-port: 0
 verify-token-audience: true
Run Code Online (Sandbox Code Playgroud)

我还为 application.yml 添加了此配置:

 server:
    port: 8443
    remote_ip_header: x-forwarded-for
    protocol_header: x-forwarded-proto
    use-forward-headers: true
Run Code Online (Sandbox Code Playgroud)

(3)我已将所有端口从接口更改为后端为8443