docker - 在 Nginx 代理后面时,Keycloak Docker Instace 中的 X-Frame-Options 拒绝加载
问题描述
我有一个与官方提供的非常相似的 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.
到目前为止,我无法在文档中找到任何内容来解决此问题,因此我们将不胜感激。
解决方案
如果我在 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
推荐阅读
- json - 基于类型键解组动态 JSON
- php - 在 php 数组中将键 [0] 更改为 [Name]?
- python - 字母频率替换密码
- python - lxml/python 读取带有 CDATA 部分的 xml
- elasticsearch - 无痛:检查单个文档是否包含密钥
- android - 在 Gradle 构建中引用变量
- javascript - 如何在 React 16+ 中动态添加类?
- python - 为什么 DataFrame 将所有输入的数据类型更改为对象?
- python - Python:如何从每个元素中包含 2 位数字的 str 数字创建列表?
- javascript - 在 React 中访问 API JSON 数据