簡體   English   中英

FortiGate API POST請求返回403被C#RestSharp禁止

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM