如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版

简介: 如何使用 ABAP 代码消费需要传递 CSRF token 的 OData 服务试读版

正如本教程的开篇介绍文章SAP OData 开发教程 - 从入门到提高(包含 SEGW, RAP 和 CDP)所提到的,SAP OData 服务开发,从实现技术上来说,可以分为三大类。因此本教程也分为三大部分,分别进行介绍。本文是本教程的文章目录。



作者简介

Jerry Wang,2007 年从电子科技大学计算机专业硕士毕业后加入 SAP 成都研究院工作至今。Jerry 是 SAP 社区导师,SAP 中国技术大使。在长达 15 年的 SAP 标准产品开发生涯里,Jerry 曾经先后参与 SAP Business ByDesign, SAP CRM, SAP Cloud for Customer, SAP S/4HANA, SAP Commerce Cloud(电商云)等标准产品的研发工作。


Jerry 对 SAP OData 服务的开发,测试,发布,部署,测试,及基于各种不同 SAP 技术实现的 OData 服务的幕后技术实现细节和使用场合,均有着深入的研究。



基于 SEGW - Gateway Service Builder 的开发教程



  • 更多文章正在写作中,敬请期待

使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务


  • 正在写作中,敬请期待


使用 SAP Cloud Application Programming 编程模型开发 OData 服务


  • 正在写作中,敬请期待


本教程的前一步骤,我们使用 ABAP 代码,消费了我们自己开发的 OData 服务。


访问的 url 如下:


https://{{host}}:{{port}}/sap/opu/odata/sap/ZBOOK_MANAGE_SRV/BookSet(guid'42010aee-2a94-1edd-8494-c9d14e91555e')


这个 url 因为是简单的 HTTP GET 进行的读取操作,所以消费的时候,不需要在 HTTP 请求的头部字段里,传递 CSRF token 值。


本步骤我们继续学习一个复杂一点的场景,我们期望用 ABAP 代码触发一个 OData 服务的修改操作,使用的 HTTP 请求类型为 PUT. 因为涉及到业务数据的修改操作,所以 OData 服务协议规定,在提交这个修改操作时,HTTP 请求的头部字段,需要包含一个名叫 x-csrf-token 的字段,值为从 ABAP 服务器请求的 CSRF token 值。





关于这个数据修改的更多操作,参考本教程之前的步骤:



简单地说,我们在 ABAP 代码里,需要实现的步骤,和我们在 Postman 里的操作完全一致。


首先使用 ABAP 代码,获取 CSRF token.


完整代码参考这篇文章。


请求 CSRF token 的代码,同前一步骤通过 ABAP 代码调用 OData 服务的读取操作相比,一个区别就是,我们需要在 HTTP 请求的头部字段里,增加一个名叫 x-csrf-token 的字段,值为 fetch.




这样,我们可以利用 get_header_field 方法,从 HTTP 响应头部字段里,获取名叫 x-csrf-token 字段的值,也就是服务器返回的 CSRF token,如下图调试器里所示。


紧接着进入程序的第二部分,新建第二个 if_http_client 实例,调用该实例向服务器发送第二个 HTTP PUT 请求,同时使用刚刚从服务器端获得的 CSRF token,作为 HTTP 头部字段 x-csrf-token 的值。


第二部分的代码如下。


两部分编写完毕,执行报表,在最后一行,从服务器得到的响应,居然是 CSRF token validation failed:



这就让人很费解了,为什么我们将第一个 HTTP 请求,从服务器获取的 CSRF token,立即传递给了 第二个 HTTP 请求的头部字段,为什么仍然遇到 CSRF token 验证失败的错误消息呢?


问题分析及解决方案在这里

相关文章
|
6月前
|
安全 算法 数据安全/隐私保护
CSRF 实验:Token 不与 Session 绑定绕过验证
CSRF 实验:Token 不与 Session 绑定绕过验证
|
6月前
|
安全 API 数据库
SAP ABAP OData 中 Function import 的概念介绍
SAP ABAP OData 中 Function import 的概念介绍
|
6月前
|
前端开发 数据库 开发者
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
如何在 SEGW 事务码里为 SAP ABAP OData 服务实现 Function Import 试读版
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
SAP ABAP OData 服务里需要指定 guid 类型的请求参数时,正确语法是什么?
|
6月前
|
存储 安全 Go
CSRF 实验:Token 不存在绕过验证
CSRF 实验:Token 不存在绕过验证
|
6月前
|
BI 网络安全
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
如何使用 ABAPGit 在 SAP ABAP 系统安装 abap2xlsx 工具试读版
|
6月前
|
XML 网络安全 开发工具
如何下载并安装 SAP ABAPGit,并完成 ABAP 服务器上 SSL 证书的配置试读版
如何下载并安装 SAP ABAPGit,并完成 ABAP 服务器上 SSL 证书的配置试读版
|
6月前
|
网络安全
实战分析 - 为什么有些 SAP ABAP 程序,启动之后界面有些按钮是灰色的试读版
实战分析 - 为什么有些 SAP ABAP 程序,启动之后界面有些按钮是灰色的试读版
|
6月前
|
前端开发 开发工具 Android开发
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
|
6月前
|
BI
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示
工具分享 - 将一个 ABAP Function Group 内所有 Function Module 按照代码行数从高到低排序并显示