根据 mod_auth 表达式有条件地设置标头

根据 mod_auth 表达式有条件地设置标头

我有一个 apache 2.4 充当应用程序的反向代理。我需要根据 mod_auth 表达式有条件地为代理设置标头。特别是我使用 mod_auth_openidc,我需要根据 OIDC 角色应用标头,但我不知道如何在 If 语句中使用它。

举个例子,这是可以正常工作的:

<Location "/app">
    Require claim roles:app_reader
    RequestHeader set Authorization "Basic ${READER_TOKEN}"
</Location>

但是,我需要做这样的事情:

<Location "/app">
    <If "-n %{claim roles:app_admin}">
        RequestHeader set Authorization "Basic ${ADMIN_TOKEN}"
    </If>
    <ElseIf "-n %{claim roles:app_reader}">
        RequestHeader set Authorization "Basic ${READER_TOKEN}"
    </ElseIf>
</Location>

最新的不起作用,因为我不确定如何实际引用 mod_auth 表达式。请注意,这很可能不是我的插件所特有的,如果你替换claim roles:app_admin为,valid-user我猜情况是一样的。

但是,具体到我的模块,它正在使用我需要的信息设置环境变量和标头 ( OIDC_CLAIM_roles)。但它们似乎无法在 上访问Locationreq()resp()找不到它们。

关于哪种方法正确,有什么建议吗?

答案1

我找到了解决方案,感谢模块创建者

Apache 中的 If 部分在身份验证之前进行评估,因此这是不可能的。但是,mod_auth_openidc 允许通过执行以下操作来做到这一点:

<Location "/app">
    RequestHeader set Authorization "Basic ${READER_TOKEN}" expr=reqenv('OIDC_CLAIM_roles')=~/app_reader/
    RequestHeader set Authorization "Basic ${ADMIN_TOKEN}" expr=reqenv('OIDC_CLAIM_roles')=~/app_admin/
</Location>

相关内容