我已将我的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端的密钥斗篷使用/ auth进行身份验证:
{
"realm" : "local",
"auth-server-url" : "/auth",
"ssl-required" : "external",
"resource" : "client-local",
"public-client" : true
}
我已经成功登录,但是在发出服务器请求后,过滤器(org.keycloak.jaxrs.JaxrsBearerTokenFilterImpl
中的keycloak-jaxrs-oath-client-4.0.0.FINAL
)引发了异常:
WWW身份验证:Bearer realm =“ local”,错误=“ invalid_token”, error_description =“无效的令牌发行者。期望 'http://keycloak:8090/auth/realms/local',但是 'http://localhost/auth/realms/local'“
我在这里想念的是什么?我期望反向代理对于密钥斗篷来说是透明的……我也无法在密钥斗篷管理面板中找到将本地主机添加到有效发行人的选项……
如何使该设置生效?
答案 0 :(得分:2)
您的代理应该在代理上添加转发标头,例如X-Forwarded-For
,X-Forwarded-Proto
和X-Forwarded-Host
,这将允许密钥斗篷检索客户端(不是反向代理)的原始IP,即出于安全原因很重要。同样,Keycloak可以检索其在代理服务器外部出现的主机名,这应该有助于解决无效令牌发行人问题。
此外,如果您使用的是Docker映像,请配置Keycloak以使其使用代理标头,并使用环境变量PROXY_ADDRESS_FORWARDING=true
。
查看文档[1],您将在此处找到更多答案。 [1] https://www.keycloak.org/docs/4.8/server_installation/#_setting-up-a-load-balancer-or-proxy
答案 1 :(得分:-3)
这是一个常见问题,因为Keycloak与生成令牌的发行者一起验证放置的令牌的发行者。在您的情况下,令牌是由http://keycloak:8090/auth/realms/local
生成的,但在给定的令牌发行者中是您的代理服务器FQDN,即http://localhost/auth/realms/local