在代理后面运行keycloak时无效的令牌发行者

9il*_*0lo 5 apache reverse-proxy keycloak

我将我的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/"
Run Code Online (Sandbox Code Playgroud)

我已经成功地告诉我在JavaScript端的密钥斗篷使用/ auth进行身份验证:

{
  "realm" : "local",
  "auth-server-url" : "/auth",
  "ssl-required" : "external",
  "resource" : "client-local",
  "public-client" : true
}
Run Code Online (Sandbox Code Playgroud)

我已经成功登录,但是在发出服务器请求后,过滤器(org.keycloak.jaxrs.JaxrsBearerTokenFilterImplfrom keycloak-jaxrs-oath-client-4.0.0.FINAL)引发异常:

WWW-Authenticate:Bearer realm =“ local”,error =“ invalid_token”,error_description =“无效的令牌发行者。预期为' http:// keycloak:8090 / auth / realms / local ',但为' http:// localhost / auth / realms / local '“

我在这里想念的是什么?我期望反向代理对于密钥斗篷是透明的...我也无法在密钥斗篷管理面板中找到将本地主机添加到有效发行人的选项...

如何使该设置生效?

5hi*_*zle 7

您的代理应在代理上添加转发标头,例如X-Forwarded-For,X-Forwarded-ProtoX-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