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

ABAP OData服务创建实体POST请求遇CSRF令牌验证失败问题

ABAP OData POST请求CSRF令牌验证失败问题

我因工作需求学习ABAP OData服务,在实现创建实体的POST请求时遇到了CSRF令牌验证失败的问题。

我的实现代码

METHOD airportsset_create_entity.

****************************************************
* VARIABLES
****************************************************

    DATA:
      lt_wa_input_data LIKE er_entity,
      lt_wa_airport    TYPE zt_xy_airport,
      lv_max_id        TYPE zd_xy_id.

****************************************************
* METHOD LOGIC
****************************************************

    " Get the data from the post request body.
    CALL METHOD io_data_provider->read_entry_data
      IMPORTING
        es_data = lt_wa_airport.

    " Copy data into the work area.
    MOVE-CORRESPONDING lt_wa_input_data TO lt_wa_airport.

    " Select the max id from the table to prevent duplicate key error.
    SELECT SINGLE MAX( airport_id ) FROM zt_xy_airport INTO lv_max_id.

    " Fill out the remaining fields of the work area.
    lt_wa_airport-mandt = sy-mandt.
    lt_wa_airport-airport_id = lv_max_id + 1.

    " Insert the data to the table.
    INSERT zt_kd_airport FROM lt_wa_airport.

  ENDMETHOD.

遇到的错误

CSRF token validation failed

我尝试过从GET请求头获取令牌并加入POST请求头,但问题依然存在,当前使用SAP LOGON 770。


问题排查与解决步骤

1. 确认CSRF令牌的获取与传递逻辑

  • 必须在同一会话内先发起GET请求(比如获取服务元数据或实体集),从响应头的x-csrf-token字段提取令牌
  • POST请求时,请求头必须同时携带:
    • x-csrf-token: [获取到的令牌值]
    • 对应会话的Cookie(从GET响应头中复制)
      会话Cookie和令牌是绑定的,跨会话使用令牌必然验证失败

2. 检查OData服务的CSRF配置

  • 用事务码/IWFND/MAINT_SERVICE找到你的服务,确认CSRF Protection处于开启状态(这是默认安全配置,若手动关闭过需重新开启并激活服务)

3. 修正代码中的错误

你的CREATE_ENTITY方法存在两处明显问题,可能引发请求异常:

  • 数据读取逻辑顺序错误:先把请求数据读到lt_wa_airport,之后用未赋值的lt_wa_input_data覆盖了它,应该调整为:
    " 先初始化工作区,再读取请求数据
    MOVE-CORRESPONDING er_entity TO lt_wa_input_data.
    CALL METHOD io_data_provider->read_entry_data
      IMPORTING
        es_data = lt_wa_input_data.
    MOVE-CORRESPONDING lt_wa_input_data TO lt_wa_airport.
    
  • 表名不一致:查询最大ID用的是zt_xy_airport,插入时却用zt_kd_airport,需统一为同一个表名

4. SAP LOGON 770测试工具的正确用法

如果用/IWFND/GW_CLIENT测试:

  1. 先发送GET请求,勾选Fetch CSRF Token选项,系统会自动获取令牌
  2. 切换到POST请求时,系统会自动填充CSRF令牌和会话Cookie,无需手动添加
  3. 确保请求体格式(JSON/XML)与服务预期一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:53:32