[英]FortiGate API POST Request returns 403 Forbidden with C# RestSharp
我目前正在使用Fortinet API制作ASP.NET C#Web窗體應用程序,目的是阻止其中的某些IP地址或URL。
CURL請求返回HTTP 403 Forbidden錯誤,而cURL請求成功發布。 這僅在POST請求中發生:GET請求在.NET和cURL中都可以正常工作。
根據我在網上找到的文檔 ,FortiNet API使用X-CSRFTOKEN標頭對POST請求驗證身份驗證,並使用Cookie進行身份驗證。 它們都包含在兩個請求中。 調試時,我將cURL請求中使用的cookie.txt文件中的cookie值替換為cookie字典值中包含的值,結果是相同的:它通過cURL傳遞,而不是C#傳遞。
這是我的RestSharp請求:
private IRestResponse createAddress(Dictionary<string, string> cookies, JObject data)
{
RestClient client = new RestClient(baseUri);
RestRequest request = new RestRequest("api/v2/cmdb/firewall/address", Method.POST);
request.AddHeader("Content-Type", "application/json");
foreach (KeyValuePair<string, string> cookie in cookies)
{
request.AddCookie(cookie.Key, cookie.Value);
}
request.AddHeader("X-CSRFTOKEN", cookies["ccsrftoken"]);
string json = JsonConvert.SerializeObject(data);
request.AddParameter("application/json", json, ParameterType.RequestBody);
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
return client.Execute(request);
}
這是我的JSON有效負載,包含在C#的JObject數據中以及cURL的params.json文件中:
{
"vdom": "root",
"name": "address",
"json": {
"type": "fqdn",
"name": "lostininternet.com",
"fqdn": "lostininternet.com"
}
}
這是我的cURL請求:
curl -d "@params.json" -H "Content-Type: application/json" -H "X-CSRFTOKEN: XXXXXXXXXXXXXXXXXXXXXX" https://192.168.13.13/api/v2/cmdb/firewall/address/ -b cookie.txt --insecure --verbose
(CSRFTOKEN值已編輯,但您知道了...)
我嘗試使用HttpWebRequest代替RestSharp,嘗試使用CookieContainer而不是手動添加它們,每次都得到相同的結果。
還有其他人有類似的問題嗎?
我正在使用FortiOS 5.6.5 Rest API。 我正在使用Powershell,它可以包含C#庫。 驗證時,服務器會為您提供該值作為Set-Cookie值,但不會將其作為Cookie發送回去。 您將X-CSRFTOKEN添加為請求標頭。 該值不是cookie。 另外,在我的案例中,我發現Powershell在字符串中添加了引號,並且刪除引號為我解決了該問題。 要注意的另一件事-如果路徑錯誤-即忘記添加監視器api / cmdb路徑,那么即使令牌正確,它也可能會返回403錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.