Dom*_*nik 14 ssl https openshift keycloak kong
所以我有一个问题,让keycloak 3.2.1在kong(0.10.3)后面工作,这是一个基于nginx的反向代理.
场景是:
我通过我的网关路由来呼叫keycloak https://{gateway}/auth,它向我显示带有keycloak徽标的入口点,链接到管理控制台等 - 到目前为止一切都很好.
但是当点击管理控制台 - >调用时https://{gateway}/auth/admin/master/console/,keycloak尝试通过http加载其css/js(参见下面的screenie),我的浏览器因为混合内容而阻止了.
我四处搜索并找到了这个帖子:keycloak apache服务器配置带有'混合内容'问题导致这个github repo:https://github.com/dukecon/keycloak_postgres_https
从那时起,我尝试将其cli成功集成到我的dockerfile中(没有更改文件的内容,只是将它们复制到我的repo中并从dockerfile添加/运行它们).这是我的dockerfile现在:
FROM jboss/keycloak-postgres:3.2.1.Final
USER root
ADD config.sh /tmp/
ADD batch.cli /tmp/
RUN bash /tmp/config.sh
#Give correct permissions when used in an OpenShift environment.
RUN chown -R jboss:0 $JBOSS_HOME/standalone && \
chmod -R g+rw $JBOSS_HOME/standalone
USER jboss
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)
所以我现在没有想法,希望你能帮助我:
如何告诉keycloak在这里通过https调用'css-files?
我是否需要更改cli脚本中的内容?
这是脚本的内容:
config.sh:
#!/bin/bash -x
set -e
JBOSS_HOME=/opt/jboss/keycloak
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}
echo "==> Executing..."
cd /tmp
$JBOSS_CLI --file=`dirname "$0"`/batch.cli
# cf. http://stackoverflow.com/questions/34494022/permissions-error-when-using-cli-in-jboss-wildfly-and-docker
/bin/rm -rf ${JBOSS_HOME}/${JBOSS_MODE}/configuration/${JBOSS_MODE}_xml_history/current
Run Code Online (Sandbox Code Playgroud)
和batch.cli:
embed-server --std-out=echo
# http://keycloak.github.io/docs/userguide/keycloak-server/html/server-installation.html
# 3.2.7.2. Enable SSL on a Reverse Proxy
# First add proxy-address-forwarding and redirect-socket to the http-listener element.
# Then add a new socket-binding element to the socket-binding-group element.
batch
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=proxy-address-forwarding,value=true)
/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=redirect-socket,value=proxy-https)
/socket-binding-group=standard-sockets/socket-binding=proxy-https:add(port=443)
run-batch
stop-embedded-server
Run Code Online (Sandbox Code Playgroud)
也可能有兴趣,kong部署在openshift上,使用从http到https的重定向路由("insecureEdgeTerminationPolicy":"Redirect").
Boo*_*mer 17
这听起来好像是在负载均衡器后面的Keycloak Docker的副本,https失败了
设置请求头X-Forwarded-For,并X-Forwarded-Proto在nginx的.然后,您必须配置Keycloak(Wildfly,Undertow)以与SSL终止反向代理(也称为负载均衡器)一起使用.有关详细说明,请参见http://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy.
关键是nginx正在终止SSL并将请求转发给Keycloak作为纯http.因此必须告诉Keycloak/Wildfly来自nginx的传入http请求必须像https一样处理.
小智 13
在所有上游负载均衡器中添加X-Forwarded-For和X-Forwarded-Proto标题(如Boomer所说)并确保它们到达Keycloak服务器.
X-Forwarded-For应该是你的Keycloak的域路由到路由到LB并且X-Forwarded-Proto应该是协议(大多数情况下是https).
作为最后一步,您需要修改standalone.xml或standalone-ha.xml归档并将proxy-address-forwarding="true"属性添加到<http-listener>元素下<server>.
如果您使用的是Docker,则可以使用PROXY_ADDRESS_FORWARDING原始Keycloak容器中的环境var来设置此属性.
bru*_*osg 11
如果您使用的是 Keycloak.X(Quarkus 版本的 Keycloak),那么这些解决方案将不起作用。
您必须设置环境变量KC_PROXY=edge(按照https://github.com/keycloak/keycloak-community/blob/master/design/keycloak.x/configuration.md)。
详细说明@MattBianco 的回复。在现代 Keycloak 变量中,您需要将 KEYCLOAK_FRONTEND_URL 设置为 https:///auth。使用 docker,您可以将其设置为环境变量,例如 KEYCLOAK_FRONTEND_URL=https://auth.foo.com/auth
我和你有同样的问题,现在解决了吗?这是我的方法。
首先,我在干净的环境中使用 cloak 设置反向代理,确认代理和 cloak 配置正确。
接下来,通过测试和猜测,我发现在设置 keycloak 时使用您从 dockerhub 和 docker 拉取的图像。在服务器上用二进制设置它有一些区别,从standalone.xml,你会发现关键点是这2:
1. 您应该为 docker env 设置 PROXY_ADDRESS_FORWARDING=true。
2. 你应该为 docker env 设置 jboss.https.port 443。
如果您的 standalone.xml 也配置正确,您将使其适用于管理页面。祝你好运;)
| 归档时间: |
|
| 查看次数: |
20314 次 |
| 最近记录: |