2016-07-05 19 views
9

Tôi đã tìm kiếm rất nhiều trên Google và ngăn xếp ngăn xếp để tìm giải pháp cho vấn đề của mình nhưng không có gì hiệu quả.Yêu cầu preflight CORS trả lại HTTP 401 với xác thực cửa sổ

Đây là vấn đề của tôi:

  • tôi sử dụng IIS 7 với một môi trường lập trình đặc biệt gọi là webdev mà không cho phép thao tác trực tiếp của OPTIONS phương thức HTTP. Vì vậy, tất cả các giải pháp cho thấy một số loại xử lý yêu cầu phía máy chủ sử dụng mã là không khả thi.

  • tôi phải sử dụng chứng thực Window và vô hiệu hóa truy cập nặc danh

  • Tôi có một trang có sử dụng CORS POST đến máy chủ này. Vì POST này phải có Content-type: Octet-stream, trình duyệt trước sẽ được phát hành.

  • Khi tôi cho phép truy cập nặc danh, mọi thứ hoạt động tốt (CORS được cấu hình tốt)

  • Khi tôi vô hiệu hóa truy cập nặc danh, server trả lời với HTTP 401 phản ứng trái phép vào các yêu cầu preflight, vì nó không chứa thông tin thông tin.

  • Tôi cố gắng để viết một module cho IIS chấp nhận OPTIONS yêu cầu như thế này, nhưng nó đã không làm việc (không thể thêm các module một cách chính xác để IIS, có lẽ)

    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; 
            } 
           }; 
          } 
        } 
    

Câu hỏi đặt ra là: Làm thế nào tôi có thể làm cho IIS đáp ứng với HTTP 200 với yêu cầu preflight mà không cho phép truy cập nặc danh hoặc viết một số mã phía máy chủ? Có cấu hình dễ dàng hay mô-đun sẵn sàng cho IIS để làm như vậy không? Ít nhất, các bước chi tiết để cài đặt mô đun trên vào IIS 7 là gì?

Trả lời

7

Đây là giải pháp sử dụng mô đun IIS "URL Rewrite". Nó hoạt động hoàn hảo.

1- Dừng IIS dịch vụ (có thể không cần thiết)

2- Cài đặt "nền tảng web cài đặt" từ https://www.microsoft.com/web/downloads/platform.aspx

3 Đến "Applications" tab và tìm kiếm cho "URL Rewrite" và tải về nó

4 Cài đặt hotfix KB2749660 này (có thể không cần thiết)

5- mở công cụ cấu hình IIS, nhấp đúp "URL Rewrite"

.210

6- Thêm một blankrule mới

7- Give it bất kỳ tên

8- Trong "trận đấu URL", xác định mô hình này: .*

9- Trong "điều kiện", xác định mục tình trạng này : {REQUEST_METHOD} và mô hình này: ^OPTIONS$

10- Trong "hành động", nêu rõ: hành động kiểu Personalized response, mã trạng thái 200, lý do Preflight, mô tả Preflight

11- Khởi động máy chủ

Hiện tại, máy chủ phải trả lời bằng mã trạng thái 200 đáp ứng yêu cầu preflight, bất kể xác thực.

Ghi chú: Tôi cũng vô hiệu hóa tất cả nén, tôi không biết nếu nó quan trọng.

+2

cuộc sống tiết kiệm bro 1 –

0

Để mô đun của bạn được ưu tiên, nó sẽ phải ghi đè bất kỳ mô-đun nào trong IIS có thể gây trở ngại. Ví dụ: web.config của bạn có thể cần hoặc bật ẩn danh và tạo thuộc tính để chặn lưu lượng truy cập và lọc thông qua khi bạn cần.

4

Từ câu trả lời của AhmadWabbi, dễ XML dán vào web.config của bạn:

<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> 
Các vấn đề liên quan