Tôi biết rằng có hàng ngàn báo cáo về những người gặp sự cố khi Xác thực Windows tích hợp hoạt động với IIS, nhưng tất cả chúng đều dẫn đến các trang web không áp dụng hoặc giải pháp mà tôi đã thử. Tôi đã triển khai hàng tá trang web như thế này trước đây, do đó, có điều gì đó kỳ lạ đang xảy ra với máy chủ / cấu hình hoặc tôi đã xem xét điều này quá lâu và không thấy rõ ràng.
Nói một cách đơn giản, mọi thứ hoạt động hoàn hảo trên máy cục bộ của tôi, nhưng lại sụp đổ trên máy chủ sản xuất, theo như tôi có thể nói có cùng cấu hình .
Trên máy cục bộ:
- Máy đang chạy Windows 7 Ultimate, Gói dịch vụ 1, IIS 7.5.
- Trang web đã được thử nghiệm thành công, sử dụng cả IIS và Máy chủ phát triển web VS.
- Cấu hình trang web IIS có tất cả các phương thức xác thực bị tắt ngoại trừ Xác thực Windows.
- Máy cục bộ không có trên bất kỳ miền nào.
- Các nhà cung cấp được thiết lập là đàm phán và NTLM (không phải đàm phán: Kerberos).
- Bảo vệ mở rộng là Tắt.
- Tất cả các trình duyệt được kiểm tra (IE, Firefox, Chrome) hiển thị lời nhắc thách thức và cho phép tôi đăng nhập vào miền localhost bằng tài khoản Windows (cục bộ) của mình.
- Tất cả các trình duyệt được kiểm tra cũng hoạt động bằng cách sử dụng địa chỉ IP cục bộ mờ - vì vậy bản thân các trình duyệt dường như không quan tâm liệu trang web xuất hiện "cục bộ" hay "từ xa".
- Tôi đã thêm một dòng hiển thị vào trang web hiển thị người dùng hiện đang đăng nhập và nó hiển thị chính xác những gì tôi mong đợi (bất kỳ người dùng địa phương nào tôi đã đăng nhập).
Trên máy từ xa:
- Máy chủ đang chạy Windows Server 2008 R2, IIS 7.5.
- Đang tải trang web dẫn đến lỗi ngay lập tức 401.2: Bạn không được phép xem trang này do các tiêu đề xác thực không hợp lệ. Không có thách thức nhắc nhở bao giờ xuất hiện.
- Cấu hình trang web IIS có tất cả các phương thức xác thực bị tắt ngoại trừ Xác thực Windows.
- Máy từ xa không có trên bất kỳ miền nào.
- Các nhà cung cấp được thiết lập là đàm phán và NTLM (không phải đàm phán: Kerberos).
- Bảo vệ mở rộng là Tắt.
- Trên máy từ xa (phiên máy tính để bàn từ xa), lỗi tương tự xuất hiện trong Internet Explorer bất kể tên miền là localhost hay địa chỉ IP bên ngoài.
- Nếu tôi cố gắng xem trang web từ xa từ máy cục bộ của mình , lỗi vẫn là 401, nhưng hơi khác một chút. Không có mã phụ, với văn bản: Quyền truy cập bị từ chối do thông tin không hợp lệ.
- Các Windows Authentication vai trò tính năng IIS được cài đặt.
- Các WindowsAuthentication module được gia tăng (ở cấp Server).
- Lỗi chính xác tương tự xảy ra nếu tôi tắt Xác thực Windows và bật Xác thực cơ bản.
- Trang web sẽ tải nếu tôi tắt Xác thực Windows và bật Ẩn danh (rõ ràng).
- Tôi đã thực hiện theo tất cả các bước khắc phục sự cố trên Hỗ trợ của Microsoft: Khắc phục sự cố lỗi HTTP 401 trong IIS
- Tôi đã thử cách giải quyết được hiển thị trên một trang hỗ trợ khác của Microsoft (được cho là buộc NTLM là phương pháp duy nhất).
Cuối cùng nhưng không kém phần quan trọng, tôi đã thử bật FREB cho các lỗi 401.2 và kết quả dường như không cho tôi biết bất cứ điều gì hữu ích, tất cả những gì tôi thấy là cảnh báo sau:
MODULE_SET_RESPONSE_ERROR_STATUS
ModuleName IIS Web Core
Thông báo 2
httpStatus 401
HttpR Lý do không được phép
httpSubStatus 2
ErrorCode 2147942405
ConfigExceptionInfo
Thông báo AUTHENTICATE_REQUEST
Truy cập ErrorCode bị từ chối. (0x80070005)
... điều này dường như chỉ nói cho tôi những gì tôi đã biết (rằng nó chỉ đơn giản là từ chối yêu cầu thay vì đàm phán thông tin đăng nhập).
Dấu vết chỉ ra rằng mô-đun WindowsAuthentication được tải chính xác vì có một NOTIFY_MODULE_START
dòng với ModuleName
= WindowsAuthentication
(và nhiều sự kiện tiếp theo khác của ASP.NET - [un] may mắn thay, không có lỗi hay cảnh báo thú vị nào ở đây).
Bất cứ ai có thể cho tôi biết những gì tôi có thể thiếu ở đây?
Cập nhật nhanh:
Tôi hơi khó chịu khi gửi toàn bộ kết xuất Wireshark vì nó sẽ tiết lộ IP, URL và các thứ khác, nhưng tôi đã so sánh song song các phản hồi HTTP từ localhost và máy chủ từ xa trong Fiddler, và nó có vẻ khá tự - chắc chắn vấn đề là gì:
Lưu trữ cục bộ:
HTTP / 1.1 401 trái phép Kiểm soát bộ nhớ cache: riêng tư Loại nội dung: văn bản / html; bộ ký tự = utf-8 Máy chủ: Microsoft-IIS / 7.5 WWW-xác thực: Đàm phán WWW-Xác thực: NTLM X-Powered-By: ASP.NET Ngày: Thứ bảy, 17 tháng 12 năm 2011 23:42:34 GMT Độ dài nội dung: 6399 Hỗ trợ proxy: Xác thực dựa trên phiên
Xa:
HTTP / 1.1 401 trái phép Loại nội dung: văn bản / html Máy chủ: Microsoft-IIS / 7.5 X-Powered-By: ASP.NET Ngày: Thứ bảy, 17 tháng 12 năm 2011 23:43:13 GMT Độ dài nội dung: 1293
Ngoài một số khác biệt dường như không quan trọng như kiểm soát bộ đệm, sự khác biệt chính là máy chủ từ xa không gửi các tiêu đề WWW-xác thực trở lại máy khách.
Vì vậy, tôi đoán rằng sẽ thu hẹp câu hỏi xuống: Tại sao IIS không gửi các tiêu đề WWW-xác thực khi Windows xác thực dường như được cài đặt, tải và kích hoạt độc quyền?