我在 Rocky Linux 9 上使用 Apache HTTP Server 2.4.62 和 auth_openidc 模块 2.4.10。在 ID 令牌中,我们的 OpenID Connect 身份提供商返回一个
memberOf
声明,如下所示:
{
"name": "...",
"memberOf": {
"elements": [
{
"type": 2,
"integer": 0,
"object": {
"string": "PRD_SUPERVISOR"
},
"name": null,
"expanded": false
},
{
"type": 2,
"integer": 0,
"object": {
"string": "UAT_OPERATOR"
},
"name": null,
"expanded": false
}
],
"length": 2
},
"sn": "..."
}
在生产环境中,我只想对属于 PRD_SUPERVISOR、PRD_OPERATOR 或 PRD_ADMINISTRATOR 组的用户进行授权。 我尝试了以下配置指令:
Require claim memberOf.elements.object.string~(PRD_OPERATOR|PRD_SUPERVISOR|PRD_ADMINISTRATOR)
失败并显示无法匹配要求声明表达式“memberOf.elements.object.string~(PRD_OPERATOR|PRD_SUPERVISOR|PRD_ADMINISTRATOR)”。我猜这可能是由于
elements
是一个数组引起的。
mod_auth_openidc Wiki 中的 Authorization 页面提供了如何处理字符串数组的示例,但我可以找到如何处理像
elements
这样的对象数组。
在https://github.com/OpenIDC/mod_auth_openidc/discussions/1286,同样的问题得到了答案:
这种类型的复杂表达式只有在编译时才可能 libjq 支持,请参阅 https://github.com/OpenIDC/mod_auth_openidc/wiki/Authorization#complex-expressions