Orbeon将授权标头设为可选

问题描述

我在具有JWT安全性的spring网关后面有一个嵌入式orbeon实例。对于orbeon生成器来说,这很好用,我需要转发Authorization标头以使事情正常运行。 但是对于表单运行者,我现在有一个要求:对于某些表单,需要身份验证,而对于另一些表单,则不需要身份验证。 可以通过以下方式配置Orbeon:如果存在Authorization标头,则将其转发;如果不存在,则不执行任何操作(只需加载表单并使其填写)?

这是我的properties-local-prod.xml中用于标头转发的设置

  <property
        as="xs:string"
        name="oxf.http.forward-headers"
        value="Authorization"/>
  <property
        as="xs:string"
        name="oxf.xforms.forward-submission-headers"
        value="Authorization token allowDraft"/>
  <property
        as="xs:string"
        name="oxf.fr.authentication.method"
        value="header"/>

现在,我获得了认的Orbeon未授权页面

当我尝试不经身份验证就打开嵌入式from-runner时得到了401(显然没有任何东西可以发送到orbeon)。我在orbeon日志中找到了它:

  HTTP status code 401 {controller: "oxf:/apps/fr/page-flow.xml",method: "GET",path: 
 "/fr/app/form/edit/myforminstanceid",status-code: "401"}

一个可能的解决方案是,是否有可能定义一种可以在每个表单定义基础上应用的运行上下文,例如prod-auth,prod-public(不幸的是,由于我们只有一个Orbeon,它们应该并行激活)实例)。 (再考虑已经可用的run modes,例如,对于同一组表单,我应该能够定义该保存草稿对于有经验的用户可见,但对于匿名用户不可见...尽管我已经解决加上一些不太好的JavaScript魔术。)

解决方法

当将类似的配置放置到properties-prod.xml时,Orbeon本身不会执行任何操作,只是转发给定的标头。

尽管默认的Orbeon Forms日志记录可能更好(关于进一步的HTTP调用以了解后台发生了什么),但日志中只有一行是在请求到达时它执行的操作。事实证明,我的自定义后端(持久层)期望使用Authorization标头。

我不得不在我的春季安全配置中添加一个(/contextRoot/orbeon).permitAll(),它开始起作用。