对Edge Delivery Services表单提交中的403禁止错误进行故障诊断 troubleshooting-403-forbidden-edge-delivery
将表单从Edge Delivery Services提交到AEM Publish时,您可能会遇到 403 Forbidden 错误。 此错误表示服务器拒绝处理请求,通常是因为安全配置。 本文可帮助您识别并解决此问题的最常见原因。
问题描述
用户将表单从Edge Delivery Services提交到AEM Publish时遇到 403 Forbidden 错误。 错误显示为:
- HTTP状态代码: 403
- 错误消息:“禁止访问”或“访问被拒绝”
- 表单提交失败,无法访问AEM提交servlet
在Edge Delivery Services集成中,当托管在Edge域(.aem.live、.aem.page、.hlx.page、.hlx.live)上的表单尝试将数据提交到AEM发布实例时,经常会发生此问题。
- 存储库:
https://github.com/adobe/abc - 站点1:
main--abc--adobe.aem.live - 站点2:
main--abc1--adobe.aem.live
常见原因和解决方法
Edge Delivery Services表单提交中出现403禁止的错误可能有多个原因。 请按照以下顺序执行以下故障诊断步骤:
1. CORS(跨源资源共享)问题
症状:
- 浏览器控制台显示与CORS相关的错误消息
- “网络”选项卡显示请求在到达服务器之前被阻止
- 提及“跨源请求已阻止”的错误消息
诊断:
- 打开浏览器开发人员工具(F12)
- 检查Console选项卡以查看CORS错误消息
- 查找如下消息:
Access to fetch at 'https://publish-xxx.adobeaemcloud.com' from origin 'https://main--repo--owner.aem.live' has been blocked by CORS policy
解决方案:
在AEM中配置CORS设置,以允许来自您的特定Edge Delivery站点域的请求:
# Developer Localhost
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(http://localhost(:\d+)?$)#" CORSTrusted=true
# Edge Delivery Sites - Add each site domain individually
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://main--abc--adobe\.aem\.live$)#" CORSTrusted=true
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://main--abc1--adobe\.aem\.live$)#" CORSTrusted=true
# Legacy Franklin domains (if still in use)
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://.*\.hlx\.page$)#" CORSTrusted=true
SetEnvIfExpr "env('CORSProcessing') == 'true' && req_novary('Origin') =~ m#(https://.*\.hlx\.live$)#" CORSTrusted=true
main--abc--adobe.aem.live和main--abc1--adobe.aem.live替换为您的实际网站域。 从同一存储库托管的每个站点都需要一个单独的CORS配置条目。有关详细的CORS配置,请参阅CORS配置指南。
2. 《Dispatcher规则》
症状:
- 浏览器控制台中不显示CORS消息时出现403错误
- 请求到达服务器,但被Dispatcher阻止
- 在到达AEM应用层之前发生错误
诊断:
- 检查请求URL是否与任何Dispatcher过滤器规则匹配
- 查看可能阻止POST请求的
/filter规则的Dispatcher配置 - 验证Dispatcher配置中是否允许表单提交端点
解决方案:
更新Dispatcher配置以允许表单提交请求:
- 确保允许向表单提交端点发送POST请求
- 为Edge Delivery域添加适当的过滤器规则
- 验证是否未阻止提交servlet路径
Dispatcher过滤器配置示例:
/filter {
# Allow POST requests to form submission servlet
/0100 { /type "allow" /method "POST" /url "/content/forms/af/*" }
/0101 { /type "allow" /method "POST" /url "/adobe/forms/af/submit/*" }
/0102 { /type "allow" /method "POST" /url "/content/forms/portal/submit/adaptiveform" }
}
3.反向链接筛选问题
症状:
- 403错误,浏览器控制台中没有CORS问题
- 请求到达AEM但被Sling引用过滤器拒绝
- AEM应用层出错
诊断:
查看AEM错误日志中的反向链接筛选条件拒绝消息:
-
在
aemerror.log中查找包含以下内容的条目:- “反向链接筛选条件被拒绝”
- "org.apache.sling.security.impl.ReferrerFilter"
- 指示反向链接验证失败的消息
示例日志条目:
[ERROR] org.apache.sling.security.impl.ReferrerFilter Referrer filter rejected request with referrer 'https://main--abc--adobe.aem.live' for POST /content/forms/af/submit
解决方案:
配置反向链接筛选条件,以允许您的特定Edge Delivery站点域:
-
创建或更新OSGi配置文件:
org.apache.sling.security.impl.ReferrerFilter.cfg.json -
为您的特定站点域添加以下配置:
code language-json { "allow.empty": false, "allow.hosts": [ "main--abc--adobe.aem.live", "main--abc1--adobe.aem.live" ], "allow.hosts.regexp": [ "https://.*\\.aem\\.live:443", "https://.*\\.aem\\.page:443", "https://.*\\.hlx\\.page:443", "https://.*\\.hlx\\.live:443" ], "filter.methods": [ "POST", "PUT", "DELETE", "COPY", "MOVE" ], "exclude.agents.regexp": [ "" ] } -
通过Cloud Manager部署配置
allow.hosts数组。 仅使用正则表达式模式可能并不足以满足所有场景。 包括特定域和正则表达式模式以实现全面覆盖。诊断步骤
按照以下步骤确定403错误的特定原因:
步骤1:检查浏览器控制台
- 打开浏览器开发人员工具(F12)
- 导航到控制台选项卡
- 尝试提交表单
- 查找与CORS相关的错误消息
如果存在CORS错误: 请按照上述CORS解决方案操作。
如果没有CORS错误: 请继续执行步骤2。
步骤2:检查网络选项卡
- 打开浏览器开发人员工具(F12)
- 导航到“网络”选项卡
- 尝试提交表单
- 检查失败的请求详细信息
- 查看响应标头和状态
如果请求未到达服务器: 可能是Dispatcher问题。
如果请求到达服务器但失败: 可能是反向链接筛选条件问题。
步骤3:检查AEM日志
- 访问 Cloud Manager
- 在日志→导航到环境→环境
- 下载或查看
aemerror.log - 在提交表单前后搜索条目
- 查找反向链接筛选条件或与安全相关的消息
预防和最佳实践
1.安装过程中正确的配置
- 在初始Edge Delivery Services设置期间配置CORS、Dispatcher和反向链接筛选条件设置
- 列入允许列表 对于每个新站点: 将特定域添加到所有(CORS,反向链接筛选器)
- 在开发环境中测试表单提交内容后上线
2.特定于环境的配置
- 使用不同的配置进行开发、暂存和生产环境
- 包含本地主机域以进行本地开发测试
- 记录您的存储库需要允许列表访问权限的所有网站域
3.监测和记录
- 为反向链接筛选条件拒绝设置日志监测
- 在表单提交代码中实施正确的错误处理
- 在测试期间使用浏览器开发人员工具
4.文档和团队知识
- 维护使用相同存储库的所有站点域的注册表
- 对开发团队进行故障排除步骤的培训
- 维护Edge Delivery Services表单设置的核对清单
- 每当从现有允许列表库创建新站点时,更新存储库
用于重写设置的站点域管理
使用Helix-5和无层体系结构,请遵循以下准则:
创建新站点时
- 标识站点域 (例如,
main--newsite--adobe.aem.live) - 更新CORS配置 以包含新域
- 更新反向链接筛选条件 以在
allow.hosts中包含新域 - 从新站点提交 测试表单
- 在站点注册表中记录新域
域命名模式
- 标准模式:
{branch}--{site}--{owner}.aem.live - 即使共享同一存储库,每个网站也会获得一个唯一的域
.aem.live和.aem.page域都可以使用
配置管理
- 在
allow.hosts中使用特定域条目以获得更好的安全性 - 使用正则表达式模式进行补充,以扩大覆盖范围
- 在添加或删除站点时定期审核和更新允许列表
其他资源
相关主题
是否需要其他帮助? 如果您在执行以下疑难解答步骤后继续遇到问题,请通过以下方式联系Adobe客户支持:
- 您的特定错误消息
- AEM Cloud Service环境详细信息
- 需要表单提交访问权限的所有Edge Delivery Services站点域
- 自错误发生时起的相关日志条目
是否需要其他帮助? 如果您在执行以下疑难解答步骤后继续遇到问题,请通过以下方式联系Adobe客户支持:
- 您的特定错误消息
- AEM Cloud Service环境详细信息
- Edge Delivery Services域信息
- 自错误发生时起的相关日志条目