Keycloak正在从Location标头中的redirect_uri剥离端口为什么?

问题描述

我为我的客户端设置了以下允许的重定向uri:exp://192.168.2.212:19000

使用以下URL进行代码交换后:

GET /auth/realms/xxxxx/protocol/openid-connect/auth?code_challenge=m71Cl...D4hw&redirect_uri=exp%3A%2F%2F192.168.2.212%3A19000&client_id=3B03...

X-Forwarded-For: 178.84.x.x
X-Forwarded-Host: oidc.production.my.domain.com
X-Forwarded-Port: 443
X-Forwarded-Proto: https
X-Forwarded-Server: 09918a799a23
X-Real-Ip: 178.84.x.x

我得到一个HTTP/1.1 302 Found,其中包含以下位置字段:

Location: exp://192.168.2.212?state=T0pvzPyHF6&session_state=b1cf16ad-b.....

端口丢失。然后,我在android模拟器中的(Expo)客户端将无法连接到192.168.2.212 port 80。当然。

我正在使用docker hub镜像11.0.0

如何防止这种情况?是虫子吗?

(我的应用程序的iOS版本使用其他的redirect_uriexp://127.0.0.1:19000),但是尽管Keycloak也将端口也剥离了,并且收到了Location: exp://127.0.0.1?state=T0p...,但 / em>连接到端口19000并由于某些原因正常工作。)

编辑:请注意,身份验证在iOS上工作正常,并且我在iOS中运行与Android完全相同的Keycloak设置(这是一个React Native应用程序)。

Keycloak不记录任何错误,并显示以下调试消息:

13:24:33,365 DEBUG [org.keycloak.events] (default task-47) type=LOGIN,realmId=neemop,clientId=3B03FD35,userId=28619cd3-c51d-4756-9d06-fb47********,ipAddress=178.84.x.x,auth_method=openid-connect,auth_type=code,response_type=code,redirect_uri=exp://192.168.2.212:19000,consent=no_consent_required,code_id=a0faa4d4-6826-4c2f-9243-*******,response_mode=query,[email protected],authSessionParentId=a0faa4d4-6826-4c2f-9243-*******,authSessionTabId=-Pn******

显示redirect_uri已正确解析。只是在实际的HTTP响应中,Location:标头忽略了端口。哪个恕我直言应该不会发生。

解决方法

似乎是一个错误:https://issues.redhat.com/browse/KEYCLOAK-9405?_sscc=t

在 12.0.4 上测试过,它仍然出现。这似乎是任何非 http(s) 协议的问题

,

另一个错误已提交给 keycloak 团队:

https://issues.redhat.com/browse/KEYCLOAK-17141

keycloak 版本 >= 13.0.0