2016-08-23 39 views
1

方案

IIS Webserver。 不是.Net Webservice。 發佈到Webservice。CORS PreFlight未發送憑證,服務器要拒絕未認證的用戶

.NET Web應用程序連接在一個橫結構域方式的web服務。

要求

Web服務器需要需要與單點登錄身份驗證的Active Directory用戶。

它是可以接受的飛行前OPTIONS測試接受驗證的請求,但任何其他請求(包括OPTIONS試驗後的POST)必須要求身份驗證的用戶。

我在哪裏:

我有一個成功的CORS跨域調用的Web應用程序和Web服務器之間的工作。我可以清楚地看到OPTIONS調用工作,然後後續POST調用工作。

問題:

OPTIONS調用不發送憑證。爲了解決這個問題,我們允許匿名用戶在網站級別。否則,我們會收到401未經授權的錯誤。

然而,一旦我們做到這一點,POST不再需要驗證。事實上,Web服務器日誌顯示證書根本不在郵件中發送。這是不可接受的。

我需要一種方法是(a)強制選項調用發送Active Directory憑據或(b)Web服務器必須拒絕所有未驗證非OPTIONS請求。

首:

對於解決途徑(一),我對自己這需要相當的比賽。

對於溶液路徑(B),更希望的IIS設置或web.config中設置。網絡服務器是用python編寫的,但我想我們可以創建一個c#web服務器代碼單元,它將調用在服務器上執行真正工作的python代碼。

想法?

回答

1

理由是問題的要求:

我需要一種方法是(a)強制選項調用發送Active Directory憑據或(b)Web服務器必須拒絕所有unauthenticaed非OPTIONS請求。

無法強制瀏覽器在OPTIONS調用中發送憑據。瀏覽器需要省略所有OPTIONS飛行前請求中的憑證。

參見抓取規範的CORS-preflight fetch部分,它說該算法的第一步驟:

要執行使用請求的CORS-預檢取,執行這些步驟:

  1. 讓預檢是一個新的request方法OPTIONSURL被請求的當前的URL,引發劑是請求的initi ATOR,是請求的類型,目的地是請求的目的地,起源是請求的起源,引用是請求的引薦,和引薦政策是請求的引薦政策。

request還攜帶credentials mode

的請求具有相關聯的憑證模式,這是 「omit」, 「same-origin」 或 「include」。除非另有說明,否則爲「omit」。

由於上面提到的CORS飛行前的算法的第一步指定爲OPTIONS要求的憑證模式沒有價值,瀏覽器必須使用這些請求的默認「omit」。

鑑於此,你不會找到任何方法在客戶端(瀏覽器)端解決這個問題,所以我想你只需要在服務器端修復它。

+0

謝謝。我讀過的一些CORS文章說,這些憑證沒有在「默認」選項請求上發送,這意味着它們可以發送。 有沒有辦法將IIS配置爲只接受匿名選項請求,但需要其他任何憑據? 我們發現獲得選項的唯一方法就是停止憑據在帖子上發送。 –

+0

對不起,我對配置IIS一無所知。我回答說只是明確表示無法從客戶端解決此問題。 – sideshowbarker

0

這不是我要求的答案,但它可以解決一些人的問題。

如果您受到CORS的攻擊,並且您只是在嘗試執行Intranet應用程序,則可以將CORS關閉。

可以設置組策略來這樣做。

Computer Configuration 
-> Administrative Templates 
    -> Windows Components 
     -> Internet Explorer 
     -> Internet Control Panel 
      -> Security Page 
       -> Intranet Zone (and/or Trusted Sites Zone, depending) 
        -> Access data sources across domains 
         (set to Enabled.) 

你需要做的設置策略,確保它得到當地箱等我不精明足夠的細節來寫的那部分了的系統管理員任務。抱歉。

相關問題