我已将 keycloak 服务器放在 apache 代理后面:
ProxyRequests On
ProxyVia On
ProxyPreserveHost On
SSLProxyEngine On
SSLProxyCheckPeerCN on
SSLProxyCheckPeerExpire on
<LocationMatch "/auth/">
ProxyPass http://keycloak:8090/auth/ Keepalive=On
</LocationMatch>
ProxyPassReverse "/auth/" "http://keycloak:8090/auth/"
我已经成功地告诉我的 javascript 端的 keycloak 使用 /auth 进行身份验证:
{
"realm" : "local",
"auth-server-url" : "/auth",
"ssl-required" : "external",
"resource" : "client-local",
"public-client" : true
}
我已成功登录,但在发出服务器请求后,过滤器(org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl
from keycloak-jaxrs-oath-client-4.0.0.FINAL
) 抛出异常:
WWW-Authenticate:承载领域=“本地”,错误=“invalid_token”,
error_description="无效的令牌颁发者。预期
'http://keycloak:8090/auth/realms/local',但当时
'http://localhost/auth/realms/local'"
我在这里缺少什么?我预计反向代理对于 keycloak 来说是透明的...我也找不到将 localhost 添加到 keycloak 管理面板中的有效发行者的选项...
我怎样才能使该设置发挥作用?
您的代理应该在代理上添加转发标头,例如X-Forwarded-For
, X-Forwarded-Proto
and X-Forwarded-Host
,这将允许 keycloak 检索客户端(而不是反向代理)的原始 IP,这对于安全原因很重要。 Keycloak 还可以检索它的主机名,因为它出现在代理外部,这应该有助于令牌发行者无效问题。
另外,您还应该配置 Keycloak,以便使用代理标头,如果您使用 Docker 映像,请使用环境变量执行此操作PROXY_ADDRESS_FORWARDING=true
.
查看文档 [1],您会在那里找到更多答案。
[1]https://www.keycloak.org/docs/4.8/server_installation/#_setting-up-a-load-balancer-or-proxy
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)