php - CSRF token 验证失败: PHP POST - SAP

标签 php

$post = null;
$host = parse_url($url, PHP_URL_HOST);
$headerArr = array();
$headerArr[] = 'Content-Type:application/xml';
$headerArr[] = 'Host:' .$host;
$headerArr[] = 'X-CSRF-Token:Fetch';
$headerArr[] = 'X-Requested-With:XMLHttpRequest';

$xml_data = file_get_contents ("upload.xml");
$ch = curl_init();

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");    
curl_setopt($ch, CURLOPT_SSLVERSION,3);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml_data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);

$result = curl_exec($ch);
if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}

以上代码是我用来将 xml 数据发布到 SAP 的。但我收到错误“CSRF token 验证失败”,任何人都可以帮我解决这个问题。 如何获取 CSRF token 并使用它。 我需要从哪里获取正确的 CSRF token 。 我是 PHP 和 SAP 新手。提前致谢。

最佳答案

发出获取请求。

第一步,REST 客户端应获取当前 session 的有效 CSRF token 。为此,它会发出一个非修改请求,并包含一个自定义 header X-CSRF-Token: Fetch。返回的 [sessionid – csrf token] 对应缓存并在客户端的后续 REST 请求中使用。另一种选择是在每个 REST 请求之前发送 Fetch 请求,从而仅使用 [sessionid – csrf token] 对一次。 HTTP 请求-响应流程示例:

客户请求:

GET /restDemo/services/customers/list HTTP/1.1
X-CSRF-Token: Fetch
Authorization: Basic dG9tY2F0OnRvbWNhdA==
Host: localhost:8080

服务器响应:

HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=4BA3D75B73B8C4591F1D915BA9C2B660; Path=/restDemo/; HttpOnly
X-CSRF-Token: 5A44B387B75E54417F6C64FF3D485141
...

将缓存的 [sessionid – csrf token ] 对用于后续 REST 请求。

随后修改对同一应用程序的 REST 请求应包含有效的 jsessionid cookie 和有效的 X-CSRF-Token header 。 HTTP 请求-响应流程示例:

客户请求:

POST /restDemo/services/customers/removeCustomer HTTP/1.1`
Cookie: JSESSIONID=4BA3D75B73B8C4591F1D915BA9C2B660
X-CSRF-Token: 5A44B387B75E54417F6C64FF3D485141
Authorization: Basic dG9tY2F0OnRvbWNhdA==
Host: localhost:8080

服务器响应:

HTTP/1.1 200 OK

...

关于php - CSRF token 验证失败: PHP POST - SAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194157/

相关文章:

php - 使用 URL 中的 ID 从 mySQL 中选择数据

php - 使用 cron 作业在 mysql 中的一个查询中更新和选择

PHP OO - 如何初始化您的业务对象?

php - 如何在同一实体管理器中使用学说从 2 个数据库中检索数据?

PHP + MYSQL,比听起来更软或可配置的

php - Paypal API - CURRENCY_NOT_ALLOWED

php - 使用cURL/php获取页面,但缺少一些东西

php - 在 PHP 中生成有效的 EAN13

php - 将动态数据传递给javascript

php - 在 PHP 中解析自定义搜索语法?