apache - 在代理后面运行 keycloak 时 token 颁发者无效

标签 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/"

我已经成功地告诉我的 javascript 端的 keycloak 使用/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-Authenticate: Bearer realm="local", error="invalid_token", error_description="Invalid token issuer. Expected 'http://keycloak:8090/auth/realms/local', but was 'http://localhost/auth/realms/local'"



我在这里缺少什么?我已经预料到,反向代理对 keycloak 来说是透明的......我也找不到将 localhost 添加到 keycloak 管理面板中的有效发行者的选项......

我怎样才能使该设置发挥作用?

最佳答案

您的代理应在代理上添加转发 header ,例如 X-Forwarded-For , X-Forwarded-ProtoX-Forwarded-Host ,这将允许 keycloak 检索客户端(而不是反向代理)的原始 IP,这对于安全原因很重要。此外,Keycloak 可以检索它的主机名,因为它出现在代理之外,这应该有助于解决无效的 token 颁发者问题。

此外,您应该配置 Keycloak 以便使用代理 header ,如果您使用的是 Docker 镜像,请使用环境变量 PROXY_ADDRESS_FORWARDING=true 执行此操作。 .

看看文档 [1],你会在那里找到更多的答案。
[1] https://www.keycloak.org/docs/4.8/server_installation/#_setting-up-a-load-balancer-or-proxy

关于apache - 在代理后面运行 keycloak 时 token 颁发者无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51554178/

相关文章:

wordpress - Varnish Wordpress SSL Apache

java - Apache POI java.lang.NoClassDefFoundError : org/apache/commons/compress/archivers/zip/ZipFile

用于更新 ssl.conf 中 ssl 证书文件路径的 Bash 脚本

jboss - 如何在 8080 端口上启动 keycloak 2.0?

apache - .htaccess 在域文件夹中无法正确重定向

http - 带有 http 和 https 的 Nginx 上游

angular - 重写Azure存储中托管的静态网站的URL

security - 反向代理是否使 node.js 安全?

keycloak - 添加具有凭据的新用户临时属性不起作用

java - keycloak - SSL 错误 : Certificates do not conform to algorithm constraints