最近在 Postman 里测试一个自己开发的 SAP Gateway OData 审批服务,场景很普通,前端或者外围系统向 SAP 发送审批或者拒绝请求。GET请求一次就成功了,Service Document 能返回,EntitySet 也能查到数据,Basic Authentication 同样没有问题。
真正发POST时,SAP Gateway 却直接返回了下面这组很熟悉的信息。
403 Forbidden
CSRF token validation failed
看到这个错误,很容易把注意力放到 ABAP 的CREATE_ENTITY、UPDATE_ENTITY、Action、Function Import 或 RAP Behavior Implementation 上。但很多时候,请求甚至还没有真正进入我们的业务处理代码。
这里卡住的并不是 ABAP 业务逻辑,而是 SAP Gateway 在进入业务逻辑之前执行的一层 HTTP 安全检查。
理解这一点之后,整个问题就清楚很多了。
SAP Gateway 对读取操作和修改操作采取的安全策略并不完全一样。一个普通的GET只是读取数据,通常不改变服务器状态,因此通过认证之后便可以正常执行。而POST、PUT、PATCH、MERGE、DELETE这类请求可能修改 SAP 中的数据,G