我们在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
从两个方面违反了规范:
- 打破https://www.rfc-editor.org/rfc/rfc9110.html#name-accept与内容类型*
- 在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快照存储库中)吗?由于