2014-07-23 36 views
5

Tôi đã tạo một ứng dụng ASP.NET MVC 5 mới với điều khiển truy cập mặc định được cung cấp bởi Visual Studio 2013 và Owin Middleware.Xác thực OWIN với xác thực cơ bản IIS

Tôi đã bật xác thực cơ bản trên IIS (vô hiệu hóa tất cả xác thực khác) để bảo vệ trang web khỏi những người không có người dùng/mật khẩu mà tôi đã tạo trên Windows. Nó dẫn đến một "redirect loop” trong trình duyệt.

Bất cứ ý tưởng tại sao? Làm thế nào tôi có thể bảo vệ một trang web mà không cần thay đổi mã?

Trả lời

5

Theo mặc định trong Startup.Auth.cs tập tin, sẽ có một cái gì đó như thế này:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Main/Account/Login"), 
       CookieName = "OwinAuthCookie", 
      }); 

Khi bạn kích hoạt Basic Authentication trong IIS, đây là những gì sẽ xảy ra:

  1. IIS Basic Authentication Module thấy rằng không có tiêu đề xác thực, vì vậy nó trả về một 01.238..
  2. Phản hồi không được trả lại ngay lập tức, nhưng được xử lý bởi Owin.
  3. Owin thấy yêu cầu nhận được 401 (Unauthorized) Response, do đó, nó chuyển hướng đến cấu hình LoginPath.
  4. Trình duyệt của bạn xử lý chuyển hướng, cố gắng mở URL mới và chúng tôi quay lại điểm 1. Và đó là vòng lặp.

Điều bạn có thể làm là nhận xét thuộc tính LoginPath trong mã ở trên. Điều này sẽ dừng vòng lặp chuyển hướng, nhưng cũng có thể (nhưng không phải, tùy thuộc vào việc triển khai của bạn) phá vỡ xác thực cho người dùng ứng dụng.

Điều cuối cùng tôi đã làm là triển khai một phần mềm trung gian nhỏ của Owin và tự mình thực hiện Xác thực cơ bản.

Các liên kết này có thể hữu ích:

+0

Tôi đã làm điều này quá. Tôi đã tạo một trang cho người dùng xác thực và vô hiệu hóa Xác thực cơ bản. – Fabio

Các vấn đề liên quan