You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Power Virtual Agent BOT调用S/4 HANA OData PATCH请求时CSRF验证失败

问题:Teams中PVA Bot通过Azure网关调用S/4 HANA OData v2 PATCH请求失败(CSRF验证错误)

场景描述

部署在MS Teams的Power Virtual Agent Bot,通过Azure HTTP网关向S/4 HANA发起OData v2的PATCH请求时返回403错误,但同一用户在Postman和SAP Gateway Client中测试该服务完全正常。

当前BOT侧配置步骤

  • 步骤1:发起GET请求获取CSRF Token,请求头配置:
    Authorization: Bearer(tokenvalue)
    X-CSRF-Token : Fetch
    Set-Cookie   : Fetch
    
    注:Cookie值已转码,将/替换为%2F、空格替换为%2b、逗号替换为;
  • 步骤2:获取CSRF Token后存入本地变量,发起PATCH请求,请求头配置:
    Authorization  : Bearer(tokenvalue)
    X-CSRF-Token   : [获取到的token值]
    Cookie         : [转码后的Cookie值]
    

错误信息(Power Automate Flow中观测)

"error": {
    "code": 403,   
    "message": "The response is not in a JSON format.",
    "innerError": "CSRF token validation failed"
  }
}

排查与解决方案

1. 修正Cookie转码逻辑

当前的Cookie转码规则存在错误:

  • 空格的URL编码应为%20而非%2b(%2b是+的编码)
  • 逗号属于Cookie的合法字符,不需要替换为;(;是Cookie的分隔符,替换后会破坏Cookie结构)
    建议直接复用GET请求返回的原始Cookie值,仅对必要的特殊字符(如/)进行转码,确保Cookie结构与Postman中一致。

2. 确认CSRF Token的完整传递

  • 检查GET请求的响应头,确保正确提取到x-csrf-token的完整值(无截断、无额外空格)
  • PATCH请求的X-CSRF-Token头必须完整填入该值,不能留空或仅部分填写

3. 对齐请求头与Postman的一致性

  • 新增Content-Type: application/json请求头(OData v2的PATCH请求需要明确指定内容类型,否则可能触发格式错误提示)
  • 对比Postman的所有请求头,确保Power Automate中没有遗漏其他必要头部(如Accept、DataServiceVersion等)

4. 验证Azure网关的转发规则

  • 检查Azure HTTP网关是否允许传递Cookie、X-CSRF-Token等自定义头部,避免网关过滤导致这些信息丢失
  • 确认网关未对请求体或头部进行额外的编码/修改,保持请求原始格式

5. 检查请求体格式

虽然错误提示指向CSRF,但附带的JSON格式错误可能是诱因:

  • 确保PATCH请求体符合OData v2规范,比如包含正确的@odata.type注解(如果需要)
  • 对比Postman中的请求体结构,排除JSON语法错误或字段缺失问题

内容的提问来源于stack exchange,提问作者Pavan Kandalam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:45:36