5

Tôi có ứng dụng ASP.NET MVC, với một số dịch vụ RESTful mà tôi đang cố gắng bảo mật bằng cách sử dụng xác thực cơ bản tùy chỉnh (chúng được xác thực dựa vào cơ sở dữ liệu của riêng tôi). Tôi đã thực hiện điều này bằng cách viết một HTTPModule.Xác thực cơ bản tùy chỉnh không thành công trong IIS7

Tôi có một phương pháp gắn liền với sự kiện HttpApplication.AuthenticateRequest, trong đó kêu gọi phương pháp này trong trường hợp thất bại xác thực:

private static void RejectWith401(HttpApplication app) 
    { 
     app.Response.StatusCode = 401; 
     app.Response.StatusDescription = "Access Denied"; 
     app.CompleteRequest(); 
    } 

Phương pháp này được gắn liền với các sự kiện HttpApplication.EndRequest:

public void OnEndRequest(object source, EventArgs eventArgs) 
    { 
     var app = (HttpApplication) source; 
     if (app.Response.StatusCode == 401) 
     { 
      string val = String.Format("Basic Realm=\"{0}\"", "MyCustomBasicAuthentication"); 
      app.Response.AppendHeader("WWW-Authenticate", val); 
     } 
    } 

Mã này thêm tiêu đề "WWW-Authenticate" để cho trình duyệt ném hộp thoại đăng nhập. Điều này hoạt động hoàn hảo khi tôi gỡ lỗi cục bộ bằng cách sử dụng máy chủ web của Visual Studio. Nhưng nó không thành công khi tôi chạy nó trong IIS7.

Đối với IIS7, tôi đã tắt các mô-đun xác thực tích hợp, ngoại trừ ẩn danh. Nó vẫn trả về một phản hồi HTTP 401, nhưng nó dường như loại bỏ tiêu đề WWW-Authenticate.

Bất kỳ ý tưởng nào?

Trả lời

2

Tôi đã tìm ra. Vấn đề là tôi đặt tên mô-đun này, "BasicAuthenticationModule" xung đột với một mô-đun khác IIS đã được tích hợp. Khi tôi đổi tên mô-đun, mọi thứ hoạt động tốt!

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