这里有人对SAP ODATA服务的X-CSRF token行为有很好的了解,特别是与Windows Auth(Kerberos)Authentication一起使用?
正在开发反对通过Postman测试的GET/PUT服务;X-CSRF token检索发生在put呼叫之前,并且在将令牌提交后(以及SAP Portal session的cookie)时接受了呼叫。
。测试服务在URL上的HTTPS上,例如:https://sapqe0.clientname.com.au:44380/sap/sap/opu/odata/sap/z_service_name_srv/testservice('parameter'')
尝试从.NET客户端应用程序进行尝试时,将呼叫的工作正常工作,包括令牌检索,但是尽管看似有效的令牌,但PUT返回了403'CSRF代币验证失败'错误。
。已经与提琴手一起追踪,并且请求/响应数据包看起来与Postman发送的内容相同。我看到的唯一区别是,客户应用在每个请求上都会收到一个不同的令牌,而Postman在连续的呼叫上收到相同的令牌。可能暗示会话未正确识别该应用程序?
C#应用程序正在使用Windows Identity(DefaultCredentials),并首先命中SAP门户以获取cookie并将其附加到ODATA请求。
在这种情况下会导致CSRF令牌验证失败的任何线索?
这是一个工作解决方案而不禁用令牌。
您不仅必须共享令牌,而且还必须在请求之间共享cookiecontainer。
private readonly CookieContainer cookieContainer = new CookieContainer();
private string csrfToken;
private void GetToken(Uri url)
{
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = WebRequestMethods.Http.Get;
request.ContentType = "application/json";
request.Accept = "application/json";
request.Credentials = Credentials;
request.CookieContainer = cookieContainer;
request.Headers["x-csrf-token"] = "Fetch";
var response = (HttpWebResponse) request.GetResponse();
csrfToken = response.Headers.Get("x-csrf-token");
}