orbeon - 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 本身在将类似的配置放入 时不会做任何事情properties-prod.xml
,只是转发给定的标头。
尽管默认的 Orbeon Forms 日志记录可能会更好(关于进一步的 HTTP 调用以了解后台发生的情况),但日志中有一行在请求到达时它做了什么。事实证明,我的自定义后端(持久层)需要Authorization
标头。
我不得不把我的弹簧安全配置 a(/contextRoot/orbeon).permitAll()
并开始工作。
推荐阅读
- java - 如何模拟注入的实现列表?
- jmeter - 如何从命令提示符(非 GUI)在 Jmeter 中配置多个实例
- sql-server - 具有唯一约束的 SQL Server 到 PostgreSQL
- qt - 源更改后 QML AnimatedImage 冻结
- reactjs - Map 方法需要箭头函数的回调(Array.prototype.map() 需要箭头函数的返回值)?
- sql - 更改 Redshift 排序键不会更改查询时间
- android - 如何过滤数据分页 3 Android?
- python - json 保存和加载文件
- postgresql - PostgreSQL:将数据从一个模式复制到另一个模式的 Trubles
- python - 如何从多个值中获取键?