Orbeon 使授权 header 可选

Orbeon make Authorization header optional

我有一个嵌入式 orbeon 实例,位于具有 JWT 安全性的 spring 网关后面。这很有效,对于 orbeon 构建器,我需要转发授权 header 才能使事情正常进行。 但是对于 form-runner,现在我有一个要求:对于某些表单,需要身份验证,对于其他一些则不需要。 可以通过以下方式配置 Orbeon:如果授权 header 存在,则转发它,如果不存在,什么都不做(只需加载表格并让它填写)?

这是我properties-local-prod中header转发的设置。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,例如,对于同一组表单,我应该能够定义 save-draft 对认证用户可见,但对匿名用户不可见......虽然我有已经用一些 not-that-nice javascript 魔法解决了这个问题。)

Orbeon 本身不会做任何事情,当一个人把类似的配置放到 properties-prod.xml 时,只是转发给定的 headers。

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

我不得不在我的 spring 安全配置中添加一个 (/contextRoot/orbeon).permitAll() 然后它开始工作了。