在向 OIDC 提供程序发送的请求中发送的格式错误的"Accept"标头



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

当请求OIDC Provider (Content-type: application/json文档)的配置元数据时,Magnolia发送以下Accept报头:

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

从两个方面违反了规范:

  1. 打破https://www.rfc-editor.org/rfc/rfc9110.html#name-accept与内容类型*
  2. 在q值为0.2时中断https://www.rfc-editor.org/rfc/rfc9110.html#quality.values

这将导致符合要求的服务器返回406(内容协商)错误,并且Magnolia没有返回所请求的OIDC配置元数据。

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

GET/HTTP/1.1用户代理:Java/17.0.6主持人:127.0.0.1:8888接受:text/html、image/gif、image/jpeg、*;q =。2、*/*;q = 2连接:keep-alive

不幸的是,正如我们在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

Thanks in advance

富G

期望响应头符合标准

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

提交已经在未来的v6(尚未GA发布)中引入,以SpringResourceHelper(在pac4j-core中)取代DefaultResourceRetriever(来自Nimbus库),以便能够(重新)加载任何Spring资源(resource:, classpath:, file:, http:)的元数据。

在这两种情况下,它们都依赖于URLConnection,所以它们应该有相同的问题。

I just committed: https://github.com/pac4j/pac4j/commit/3a21347069b0de186a4269d058ac60988d587c73

您可以再次测试5.7.1-SNAPSHOT版本(在Sonatype快照存储库中)吗?由于

相关内容

  • 没有找到相关文章

最新更新