2016-07-05 126 views
9

我搜索了很多谷歌和堆棧溢出找到解決我的問題,但沒有奏效。CORS預檢請求返回HTTP 401與Windows身份驗證

這裏是我的問題:

  • 我用IIS 7具有特殊的編程環境調用Webdev的,不允許OPTIONS HTTP方法的直接操作。所以,所有提出某種使用代碼的服務器端請求處理的解決方案都是不可行的。

  • 我必須使用Window身份驗證並禁用匿名訪問

  • 我有一個使用CORS張貼到該服務器的頁面。由於此POST應該有Content-type: Octet-stream,因此瀏覽器會發布預檢。

  • 當我啓用匿名訪問,一切工作正常(CORS良好配置)

  • 當我禁用匿名訪問,服務器與HTTP 401預檢要求擅自響應回覆,因爲它不包含憑據信息。

  • 我試着寫的IIS接受這樣OPTIONS請求模塊,但它沒有工作(不能正確添加模塊到IIS,也許)

    public class CORSModule : IHttpModule 
        { 
    
          public void Dispose() { 
          } 
    
          public void Init(HttpApplication context) 
          { 
           context.PreSendRequestHeaders += delegate 
           { 
            if (context.Request.HttpMethod == "OPTIONS") 
            { 
             var response = context.Response; 
             response.StatusCode = (int)HttpStatusCode.OK; 
            } 
           }; 
          } 
        } 
    

問題是:我怎樣才能讓IIS響應HTTP 200到預檢請求而不啓用匿名訪問或寫一些服務器端代碼?有沒有一個簡單的配置或現成的模塊爲IIS做到這一點?至少,將上述模塊安裝到IIS 7中的詳細步驟是什麼?

回答

7

以下是使用「URL重寫」IIS模塊的解決方案。它完美的作品。

1-停止IIS服務(也許不是必要的)

2 - 從https://www.microsoft.com/web/downloads/platform.aspx

3-進入「應用程序」選項卡安裝「web平臺安裝程序」,然後搜索「URL重寫」並下載

4-安裝此修補程序KB2749660(也許不是必要的)

5打開IIS配置工具,雙擊 「URL重寫」

6-添加新blankrule

7-給它的任何名稱

8在 「匹配URL」,指定此模式:.*

9-在 「條件」,指定此條件輸入:{REQUEST_METHOD}該圖案:^OPTIONS$

10-在 「動作」 中,指定:動作類型Personalized response,狀態代碼200,原因Preflight,描述Preflight

11-啓動服務器

現在,無論身份驗證如何,服務器都應回覆一個針對預檢請求的200狀態碼響應。

備註:我也禁用了所有壓縮,我不知道它是否重要。

+2

生命的救星兄弟+1 –

0

爲了讓您的模塊優先,它將不得不覆蓋IIS中可能會受到干擾的任何模塊。例如,您的web.config可能需要一個或啓用匿名,並創建一個攔截流量和過濾通過您的需要的屬性。

4

從AhmadWabbi的回答,容易XML粘貼到你的web.config:

<system.webServer> 
    <rewrite> 
     <rules> 
      <rule name="CORS Preflight Anonymous Authentication" stopProcessing="true"> 
       <match url=".*" /> 
       <conditions> 
        <add input="{REQUEST_METHOD}" pattern="^OPTIONS$" /> 
       </conditions> 
       <action type="CustomResponse" statusCode="200" statusReason="Preflight" statusDescription="Preflight" /> 
      </rule> 
     </rules> 
    </rewrite> 
</system.webServer>