Orbeon 使 Authorization 标头可选
Posted
技术标签:
【中文标题】Orbeon 使 Authorization 标头可选【英文标题】:Orbeon make Authorization header optional 【发布时间】:2021-02-21 08:11:19 【问题描述】:我有一个嵌入式 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实例)。 (进一步考虑已经可用的run modes,例如对于同一组表单,我应该能够定义保存草稿对经过身份验证的用户可见,但对匿名用户不可见......虽然我已经解决了这个问题一些不太好的 javascript 魔法。)
【问题讨论】:
【参考方案1】:Orbeon 本身不会做任何事情,当您将类似的配置放入 properties-prod.xml
时,只是转发给定的标头。
尽管默认的 Orbeon Forms 日志记录可能会更好(关于进一步的 HTTP 调用以了解后台发生的情况),但日志中有一行在请求到达时它做了什么。事实证明,我的自定义后端(持久层)需要 Authorization
标头。
我必须在我的 spring 安全配置中添加一个 (/contextRoot/orbeon).permitAll()
并开始工作。
【讨论】:
我不会假装完全理解您的解决方案;),但我很高兴它正在工作! ——亚历克斯以上是关于Orbeon 使 Authorization 标头可选的主要内容,如果未能解决你的问题,请参考以下文章
ORBEON:是不是可以添加自定义标头或向 API 授权方发送会话 cookie
为啥要对 Authorization 标头进行 base64 编码?
HttpRequestMessage 不允许 Authorization 标头值