首页 > 解决方案 > Orbeon 使 Authorization 标头可选

问题描述

我有一个嵌入式 orbeon 实例,位于具有 JWT 安全性的 spring 网关后面。这很好用,对于 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 实例)。(进一步考虑已经可用的运行模式,例如对于同一组表单,我应该能够定义保存草稿对经过身份验证的用户可见,但对匿名用户不可见......虽然我已经用一些方法解决了这个问题不是那么好的 javascript 魔法。)

标签: orbeon

解决方案


Orbeon 本身在将类似的配置放入 时不会做任何事情properties-prod.xml,只是转发给定的标头。

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

我不得不把我的弹簧安全配置 a(/contextRoot/orbeon).permitAll()并开始工作。


推荐阅读