Pac4j v5.7.0调用OIDC Provider时Accept头不符合HTTP规范问题
Pac4j v5.7.0(适配Magnolia CMS SSO模块)OIDC元数据请求的HTTP合规问题及修复指引
问题概述
在Magnolia CMS的SSO模块中使用Pac4j v5.7.0请求OIDC Provider的配置元数据(预期返回application/json类型)时,发送的Accept头为:
text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
该请求头触发合规OIDC服务器返回406(内容协商失败)错误,导致无法获取所需的配置元数据。
违规点分析
该Accept头存在两处违反RFC 9110规范的问题:
- 媒体类型格式违规:单独使用
*作为媒体类型不符合规范,RFC 9110要求通配符媒体类型必须为*/*(表示所有类型),不能单独使用* - 质量值(q值)格式违规:q值的合法格式需包含小数点前的0,例如
q=0.2,而当前的.2写法不符合标准
根因定位
Pac4j在此请求流程中直接复用了java.net.URLConnection的默认Accept头,且SpringResourceHelper类未对该请求头做自定义修改。问题根源可追溯至3个月前引入SpringResourceLoader/Helper类的代码提交,在Pac4j v5.7.0版本中,相关请求逻辑位于OidcConfiguration.java的175-195行。
修复建议
需要在请求OIDC配置元数据的逻辑中,显式设置符合HTTP规范的Accept头,示例合法的Accept头如下:
Accept: application/json, */*; q=0.5
具体修复方式可在SpringResourceHelper或OidcConfiguration的请求构建代码中添加自定义请求头的逻辑,覆盖默认的Accept头,确保仅包含合法的媒体类型标识和格式正确的质量值。
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

