Keycloak 重定向 URI 正在将端口 0 添加到 url

2024-03-06

在keycloak 中遇到redirect_uri 错误。发现 JIRA 记录了相同的问题KEYCLOAK-7237 https://issues.jboss.org/browse/KEYCLOAK-7237,只是想检查一下是否有解决办法?有人可以帮忙吗?先感谢您。

2018-06-30 11:34:13,996 警告 [org.keycloak.events] (默认任务 8) type=LOGIN_ERROR、realmId=Victz、clientId=portal、userId=null、ipAddress=、error=invalid_redirect_uri、redirect_uri=https://www.example.com:0/home https://www.example.com:0/home

我正在使用在 centos7、wildly 10、keycloak 3.4.3 上运行的 apache http 反向代理。也在以下环境中尝试过,但出现同样的错误。

尝试过 狂野 10、狂野 11、jboss 7.1、 Keycloak 3.4.3 以及 keycloak 4.0

还尝试关闭 apache http 并直接访问http://www.example.org:8080/home 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 &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot; &quot;%{i,COOKIE}&quot; &quot;%{o,SET-COOKIE}&quot; %S &quot;%I %T&quot;" 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>

Context

使用Keycloak时Spring Boot 客户端适配器 https://www.keycloak.org/docs/latest/securing_apps/#_spring_boot_adapter在反向代理后面,URL 查询参数redirect_uri set by OAuthRequestAuthenticator.java https://github.com/keycloak/keycloak/blob/master/adapters/oidc/adapter-core/src/main/java/org/keycloak/adapters/OAuthRequestAuthenticator.java可能包含端口后缀:0由于配置不完整或错误。

基本问题

为了构建redirect_uri,Spring Boot 应用程序需要猜测其公共 URL,至少包括协议和主机名,可能还包括 IP 端口。在反向代理后面,这需要与代理合作和/或显式配置。

解释:0

The :0,如果存在,可能是由OAuthRequestAuthenticator.java https://github.com/keycloak/keycloak/blob/eacc95b6998cd16d8a0574660946ee7d8727b527/adapters/oidc/adapter-core/src/main/java/org/keycloak/adapters/OAuthRequestAuthenticator.java#L153(这种松散的处理可能被认为是一个错误,但在目前的情况下源于不完整的配置。):Keycloak 识别出 Spring Boot 应用程序正在谈论 HTTPS,但它发现没有 HTTPS 端口配置,因此它默认为零。

解决步骤

假如说:

  • 这是关于 Spring Boot 应用程序
  • 在反向代理后面运行
  • 充当 Keycloak 客户端

您需要确保以下事项来解决问题:

  1. configure the reverse proxy to add following headers
    • x-forwarded-for告诉主机名
    • x-forwarded-proto判断连接是否安全
  2. configure the Spring Boot app to act correctly
    • 只需阅读当前的 Spring Boot有关在代理服务器后面运行的“操作方法”指南 https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-use-behind-a-proxy-server(一个简洁的屏幕页面)
  3. configure Keycloak's Spring Boot adapter https://www.keycloak.org/docs/latest/securing_apps/#_java_adapter_config
    • 也许你需要明确设置confidential-port to 443

故障排除/交叉检查

只有一点:假设这是关于反向代理后面的 Spring Boot 应用程序,您应该能够使用tcpdump或类似的方式来监控未加密的流量(例如-i lo -s0 -A)并查看 HTTP 标头。发送到 Spring Boot 应用程序的任何请求都应包含上述 Spring Boot Security How-to 所需的标头(x-forwarded-for and x-forwarded-proto),否则,代理配置错误。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keycloak 重定向 URI 正在将端口 0 添加到 url 的相关文章

随机推荐

  • 在 Objective C 中将 RTF 文件转换为 HTML

    如何将 RTF 文件转换为 HTML 格式 我有一个文本编辑器 可以将文件保存为 rtf 格式 但我需要将内容放在我的服务器上 为此 我需要将 rtf 文件转换为 html 文件 我无法找到有关 Objective C 的任何帮助 谢谢 我
  • 如何从 voiceXML 调用 Web 服务?

    我正在构建一个非常简单的 voiceXML 应用程序 以允许人们进行录音 但首先 我需要通过电话号码和 或 PIN 码对呼叫者进行身份验证 我可以从 voiceXML 调用 Web 服务吗 看起来我想使用 voiceXML 数据 元素来调用
  • 为什么call指令的操作码表示为FF15?

    我仍在学习汇编并尝试将指令与其操作码连接起来 阅读 pdf 在https code google com p corkami wiki PE101 show content https code google com p corkami w
  • 如何将 Qt5 和 Qt Creator 2.6.1 与 VS 2012 的编译器一起使用?

    官方下载 http qt project org downloads现在仅包含 VS 2010 的 Qt 库 5 0 0 我在 VS 2012 Express 中尝试了它们 但收到一条错误消息 错误 LNK2038 检测到 MSC VER
  • 有没有办法在所有 jquery 脚本运行后查看网页的源代码?

    我目前使用 Chrome Firefox 进行 Web 开发 有没有一个插件 或者我只是另一种方式 您可以在所有 jQuery 插件运行后查看 HTML 源代码 我只是想看看 jQuery 修改了什么以及如何修改 HTML Firebug
  • 带有 gcc stdlib 的 icpc C++11

    我正在使用 icpc 非可选 并且使用 std c 0x 进行编译 因此我可以使用ambas 然而 当我这样做时 它会使用 gcc stdlib 创建 havok 其中一个支持另一个不支持的功能 我尝试过定义 GXX EXPERIMENTA
  • 使用指定存储库中的 Git 分支动态填充 Jenkins Choice 参数

    我有一个参数化的 Jenkins 作业 它需要输入特定 Git 存储库中的特定 Git 分支 目前该参数是一个字符串参数 有没有办法让这个参数成为选择参数并用Git分支动态填充下拉列表 我不想要求有人在每次创建新分支时手动配置下拉列表来维护
  • php-fpm 进程监控/分析

    我最近遇到了 php fpm 进程使用 如活动进程数量 的问题 达到了最大可用进程的峰值 并停止执行其他脚本 直到有问题的进程完成 更详细一点 我当前的 php fpm 设置是 pm static pm max children 100 我
  • 在 Java 中以编程方式清除控制台

    我创建了一个示例 Java 应用程序 我想清除窗口选项 即 Register Login Clear 如果用户按 3 我需要以编程方式清除所有选项 就像是Console clear 有什么办法可以用 Java 做到这一点吗 您将需要输出一堆
  • 如何将较小的位图复制到较大的位图?

    希望这应该是一个简单的问题 我正在尝试将一系列小位图复制到较大的位图中 将它们并排排列 像素中没有任何间隙或重叠 例如 如果我有 3 个正方形位图 我想将它们复制到一个细长的矩形中 我知道如何做相反的事情 即从较大的位图创建一个小位图 但不
  • 与应用内购买的“无法连接到 iTunes”相关的供应商 ID 错误消息是什么?

    这是一条神秘的错误消息 LaunchServices 无法获取供应商ID 我猜这是某个苹果服务器现在宕机了 很快就会恢复在线 背景 我的 iOS 应用程序之前没有批准的应用内购买 因此这仍然是必须提交新版本应用程序以及新的应用内购买产品的阶
  • Angular 5 无法找到“object”类型的不同支持对象“[object Object]”。 NgFor 仅支持绑定到 Iterables,例如数组

    我正在尝试从我的后端 api 返回产品并将其显示在我的前端页面上 当我执行 ngFor 循环时 它给了我一个错误 这是我的代码 我的后端API data 0 name perferendis totalPrice 323 76 rating
  • Rails 设计:after_confirmation

    有没有办法创建一个after confirmation do something 目标是在用户确认使用 Devise 后发送电子邮件 confirmable 我正在使用 Devise 3 1 2 它有一个占位符方法after confirm
  • 如何使用stdext::hash_map?

    我想看一个如何正确重写 stdext hash compare 的简单示例 以便为我自己的用户定义类型定义新的哈希函数和比较运算符 我正在使用 Visual C 2008 这就是你可以做到的 class MyClass Hasher con
  • Vue Axios 动态 URL

    我想在 vue js 应用程序中动态创建 axios post 操作的 URL 路径 这是动作 editProduct function dispatch commit payload axios put http localhost 80
  • 如何删除单个链表中的循环?

    我不确定在不使用 O N 内存和标志的情况下如何找到循环的开始 找到循环内部的一个节点 具体参见1800 INFORMATION的回答 我们称这个节点为C 通过将指针从 C 前进直到再次到达 C 来求出循环的长度 循环的长度是它所采取的步数
  • 如何在方案中编写程序来查找数字列表的因数

    这是单个整数的代码 它如何扩展到函数列表 define factors n define factors d cond gt d n list modulo n d 0 cons d factors d 1 else factors d 1
  • Java日历的setMonth方法工作错误吗?

    我有如下的小代码 我预计结果应该是7 但它打印了6 如果我取消注释该行tmp get Calendar MONTH 它运行正常 打印7 请告诉我原因 我在 MacOS 中使用 JDK 1 7 0 25 public static void
  • 安装 scrapy 清理失败

    我一直在努力得到Scrapy使用 pip 安装 以便抓取 NBA 赛季的赛程表和得分 在过去的 6 个小时里 我一直在努力尝试安装它 我已经逐字按照设置说明进行操作 但仍然无法使其正常工作 任何帮助将不胜感激 终端窗口输出如下 非常感谢 顺
  • Keycloak 重定向 URI 正在将端口 0 添加到 url

    在keycloak 中遇到redirect uri 错误 发现 JIRA 记录了相同的问题KEYCLOAK 7237 https issues jboss org browse KEYCLOAK 7237 只是想检查一下是否有解决办法 有人