我正在 Apache 反向代理后面的 Wildfly 服务器上运行 JEE 应用程序。使用 keycloak-client-adapter,它连接到同样位于 apache 反向代理后面的 Keycloak 服务器。两个反向代理都会终止 SSL 连接并通过 http 连接到 Wildfly 服务器。
当我打开 JEE 应用程序时,我会被重定向到 Keycloak,在输入密码后,我也会重定向到我的应用程序 - 全部通过反向代理通过 SSL 进行。但随后我收到了 403 - 原因是:应用程序 Wildfly 尝试连接到 Keycloak 以验证 http 上的令牌。这是不允许的(keycloak.json 中的“ssl-required”:“all”并在领域中设置),http 也根本不处于活动状态。
来自应用程序 Wildfly server.log
Adapter requires SSL. Request: http://www.domain.tld/myapp/
我已经根据文档设置了Keycloak的反向代理,.well-known/openid-configuration看起来不错 - 所有URL都是https
keycloak.json
{
"realm": "myrealm",
"auth-server-url": "https://sso.domain.tld/auth",
"ssl-required": "all",
"resource": "myresource",
"verify-token-audience": true,
"credentials": {
"secret": "secret"
},
"use-resource-role-mappings": true,
"confidential-port": 443,
"policy-enforcer": {}
}
应用程序的反向代理设置
ProxyPreserveHost On
ProxyPass /myapp http://127.0.0.1:8080/myapp
ProxyPassReverse /myapp https://www.domain.tld/myapp
有人知道如何在验证中强制使用 https 吗?这应该是运行设置的最后一步。
这个聚会有点晚了,但您还需要在 Wildfly 应用程序的反向代理中使用
ProxyVia On
。 (假设您通过暂时禁用 keycloak.json 中的信任管理器来确认这不是证书问题。)