在向 OIDC 提供商的请求中发送格式错误的“接受”标头

问题描述 投票:0回答:1

我们在 Magnolia CMS 中使用 Pac4j v5.7.0 作为 SSO 模块。

当请求 OIDC Provider 的配置元数据(内容类型:application/json 文档)时,Magnolia 发送以下 Accept 标头:

text/html, image/gif, image/jpeg, *; q=.2, /; q=.2

这在两个方面打破了规范:

  1. Breaks https://www.rfc-editor.org/rfc/rfc9110.html#name-accept 内容类型 *
  2. Breaks https://www.rfc-editor.org/rfc/rfc9110.html#quality.values q 值为 .2

这会导致合规服务器返回 406(内容协商)错误,并且 Magnolia 不会返回请求的 OIDC 配置元数据。

我们对其进行追踪,发现 Pac4J 似乎使用标准的 java.net.URLConnection,不幸的是,我们看到的 Accept 标头是它的默认标头。 这是执行简单操作时发送的内容:new URL("http://localhost:8888").connect()

获取/HTTP/1.1 用户代理:Java/17.0.6 主机:127.0.0.1:8888 接受:文本/html、图像/gif、图像/jpeg、*; q=.2, */*; q=.2 连接:保持活动状态

不幸的是,正如我们在https://github.com/pac4j/pac4j/blob/master/pac4j-core/src/main/java/org/pac4j/core/resource/SpringResourceHelper.java#L52-中看到的那样L56,Pac4J 在打开连接和发送请求之前没有设置或更改任何默认标头。

如果上述分析正确,则意味着 Pac4J 违反了 HTTP 标准,将无法联系任何遵守内容协商“协议”的 OIDC 服务器。

快速查看提交历史告诉我它可能是最近的......他们引入了 SpringResourceLoader/Helper 类可能只是最近(3 个月前) -> https://github.com/ pac4j/pac4j/commit/bebd578596b11916b531c5e7da7ed4ba3d75c479

对于 5.7.0,一切都发生在这些行之间:https://github.com/pac4j/pac4j/blob/5.7.x/pac4j-oidc/src/main/java/org/pac4j/oidc/config/OidcConfiguration。 java#L175-L195

提前致谢

富贵

期望响应头符合标准

magnolia pac4j
1个回答
0
投票

我猜你在 v5.7 中有问题,尽管你引用了 v6 的提交。

提交已在未来的 v6(尚未发布 GA)中引入,以将

DefaultResourceRetriever
(来自 Nimbus 库)替换为
SpringResourceHelper
(在
pac4j-core
中),以便能够(重新)加载元数据来自任何 Spring 资源(资源:、类路径:、文件:、http:)。

在这两种情况下,他们都依赖

URLConnection
所以他们应该有同样的问题。

我刚刚承诺:https://github.com/pac4j/pac4j/commit/3a21347069b0de186a4269d058ac60988d587c73

你能用

5.7.1-SNAPSHOT
版本(在 Sonatype 快照存储库中)再次测试吗?谢谢

© www.soinside.com 2019 - 2024. All rights reserved.