在Nginx代理后的Keycloak Docker实例中,由于X-Frame-Options加载被拒绝。

3
我有一个相当类似于官方提供的docker-compose文件,即:
version: '3'

volumes:
mysql_data:
    driver: local

services:
mysql:
    image: mysql:5.7
    volumes:
        - mysql_data:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: root
        MYSQL_DATABASE: keycloak
        MYSQL_USER: keycloak
        MYSQL_PASSWORD: mypassword
keycloak:
    image: jboss/keycloak
    environment:
        DB_VENDOR: MYSQL
        DB_ADDR: mysql
        DB_DATABASE: keycloak
        DB_USER: keycloak
        DB_PASSWORD: mypass
        KEYCLOAK_USER: admin
        KEYCLOAK_PASSWORD: mypass
        # It didn't look like this actually got set. 
        PROXY_ADDRESS_FORWARDING: "true"
    ports:
        - 10000:8080
    depends_on:
        - mysql

我还有一个nginx配置文件,可以用作keycloak的反向代理。
## Redirects all HTTP traffic to the HTTPS host
server {
    listen 80;
    listen [::]:80;
    server_name keycloak keycloak.fqdn.com keycloak.fq.fqdn.com; 
    server_tokens off;
    return 301 https://keycloak.fqdn.com$request_uri;
}

## HTTPS host
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name keycloak.fqdn.com; 
    server_tokens off; 
    autoindex off;    

    include conf.d/site-common-config/ssl.conf;

    access_log  /var/log/nginx/keycloak-access.log combined;
    error_log   /var/log/nginx/keycloak-error.log warn;

    location / {
        gzip                    on;
        proxy_http_version 1.1;

        proxy_set_header    Host                $host;
        proxy_set_header    X-Real-IP           $remote_addr;
        proxy_set_header    X-Forwarded-For      $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto   $scheme;

        proxy_pass http://127.0.0.1:10000;
    }
}

我进一步确认了(据我所知)/auth/realms/master/.well-known/openid-configuration返回了正确的值。我一直在遵循这里的指南,并更新了相应的XML文件,运行了重新加载命令以确保proxy-address-forwarding设置为true。然而,我收到了JavaScript错误。
Load denied by X-Frame-Options: https://keycloak.fqdn.com/auth/realms/master/protocol/openid-connect/login-status-iframe.html?version=4.3.0.final does not permit framing.

到目前为止,我在文档中还没有找到解决这个问题的方法,所以非常感谢任何帮助。
2个回答

5
如果我在nginx/openresty配置中添加以下标头,它将起作用:
location / {
     …
     add_header X-Frame-Options "SAMEORIGIN";
     …
}

如果您想使用 kcadm.sh 更改领域中的值(因为 GUI 无法正常工作),您可以通过导出,编辑和导入领域来实现。
sudo -u keycloak /opt/keycloak/bin/kcadm.sh config credentials --realm master --user admin --server http://localhost:8080/auth
sudo -u keycloak /opt/keycloak/bin/kcadm.sh get realms/master > realm.json
# edit realm.json
sudo -u keycloak /opt/keycloak/bin/kcadm.sh update realms/master -f realm.json

1

我不明白为什么你不能使用Keycloak GUI来配置领域设置。 - undefined
X-Frame-Options正在阻止其渲染。话虽如此,我添加了一个插件来忽略Chromium中的x-frame-options头部,以便正确渲染,然后我更新了防御部分,使头部应该是完全开放的(即 * l),但我仍然收到一个DENY X-Frame-Option头部。 - undefined
在 x-frame-options 中真的允许使用 "*" 吗?请阅读链接的 Keycloak 文档和 RFC https://tools.ietf.org/html/rfc7034 以获取正确的语法。 - undefined
啊,真糟糕,是的,你说得对,X-Frame-Options不支持通配符。我会尝试明确设置它,看看是否能解决这个问题。 - undefined
很遗憾,尽管我将X-Frame-Options的值更改为allow-from https://keycloak.fqdn.com/,但仍然收到相同的错误消息。 - undefined
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接