reverse-proxy - Keycloak Redirect URI 将端口零添加到 url
问题描述
在 keycloak 中遇到 redirect_uri 错误。发现在 JIRA KEYCLOAK-7237上记录了相同的问题,只是想检查任何解决方法?任何人都可以帮忙吗?先感谢您。
2018-06-30 11:34:13,996 WARN [org.keycloak.events](默认任务 8)类型=LOGIN_ERROR,realmId=Victz,clientId=portal,userId=null,ipAddress=,error=invalid_redirect_uri,redirect_uri= https ://www.example.com:0/home
我正在使用在centos7上运行的apache http反向代理,狂野10,keycloak 3.4.3。也在下面的环境中尝试过,但同样的错误。
在wildly 10、wildly 11、jboss 7.1、Keycloak 3.4.3以及keycloak 4.0中尝试过
还尝试关闭 apache http 并直接访问http://www.example.org:8080/home,但似乎 return_uri 自动转换为端口 0 的 https。
请参阅下面的standalone.xml,尝试在 proxy-peer 和 request-dumper 配置下删除,但没有运气。
<subsystem xmlns="urn:jboss:domain:undertow:4.0">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" proxy-address-forwarding="true" enable-http2="true"/>
<https-listener name="https" socket-binding="https" proxy-address-forwarding="true" security-realm="ApplicationRealm" enable-http2="true"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<location name="/drive" handler="drive"/>
<access-log pattern="%h %l %u %t "%r" %s %b "%{i,Referer}" "%{i,User-Agent}" "%{i,COOKIE}" "%{o,SET-COOKIE}" %S "%I %T"" prefix="access."/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
<http-invoker security-realm="ApplicationRealm"/>
</host>
<host name="example1" alias="example.com1,www.example.com1" default-web-module=“example1-0.1.war">
<location name="/drive" handler="drive”/>
<filter-ref name="proxy-peer"/>
<filter-ref name="request-dumper" priority="30"/>
</host>
<host name="example2" alias="example.com2,www.example.com2" default-web-module="example2-0.1.war">
<location name="/drive" handler="drive"/>
<filter-ref name="proxy-peer"/>
<filter-ref name="request-dumper" priority="30"/>
</host>
<host name="example3" alias="example.com3,www.example.com3" default-web-module="example3-0.1.war">
<location name="/drive" handler="drive"/>
<filter-ref name="proxy-peer"/>
<filter-ref name="request-dumper" priority="30"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
<file name="drive" path="/app/drive"/>
</handlers>
<filters>
<response-header name="server-header" header-name="Server" header-value="JBoss-EAP/7"/>
<response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
<filter name="proxy-peer" class-name="io.undertow.server.handlers.ProxyPeerAddressHandler" module="io.undertow.core"/>
<filter name="request-dumper" class-name="io.undertow.server.handlers.RequestDumpingHandler" module="io.undertow.core"/>
</filters>
</subsystem>
解决方案
我遇到了同样的问题。我的 Spring Boot 应用程序位于 nginx 后面。我更新了 nginx 以通过 x-forwarded 标头并更新了 spring boot 配置
春季启动yaml配置:
server:
use-forward-headers: true
keycloak:
realm: myrealm
public-client: true
resource: myclient
auth-server-url: https://sso.example.com:443/auth
ssl-required: external
confidential-port: 443
nginx配置:
upstream app {
server 1.2.3.4:8042 max_fails=1 fail_timeout=60s;
server 1.2.3.5:8042 max_fails=1 fail_timeout=60s;
}
server {
listen 443;
server_name www.example.com;
...
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port 443;
proxy_next_upstream error timeout invalid_header http_500;
proxy_connect_timeout 2;
proxy_pass http://app;
}
}
使它对我有用的具体更改是添加keycloak.confidential-port
. 一旦我添加它不再在redirect_uri中添加端口0。
希望有帮助。
推荐阅读
- relational-database - DBMS 中的部分依赖
- javascript - 如何去反应的最后一个元素?
- linq - Linq 运算符聚合匹配值并对其加权
- python-3.x - 如何在 python 中导出加密密钥?
- python - 为什么在此代码中删除了最后一个按钮/任务?
- jenkins - 带有 ldap 的詹金斯:测试 LDAP 设置为用户显示两个组
- c# - Blazor wasm Web API 响应是一个 HTML 字符串
- python - 如何从脚本外部访问python变量
- python - 修改后的快速排序超出了最大递归深度
- javascript - Handlebars & Webpack:包含来自变量的模板