401 - Không được phép trên Máy chủ 2008 R2 IIS 7.5


20

Tôi có một ứng dụng web được triển khai vào hộp Server 7.5 của Server 2008.

Từ xa nó báo lỗi này : 401 - Unauthorized: Access is denied due to invalid credentials. (từ xa = máy tính để bàn trên cùng một mạng LAN)

Đã thử một số máy khách từ xa bằng các trình duyệt khác nhau, tất cả đều cho kết quả như nhau. (IE, FF và Chrome)

Đánh vào ứng dụng từ máy tính để bàn của máy chủ hoạt động hoàn hảo . Tuy nhiên tôi chưa thử Fireorms trên máy tính để bàn. Tôi cho rằng nó vẫn đang phát hành mã trạng thái 401 nhưng vẫn trả lại nội dung. Xem Cập nhật # 2.

Ứng dụng này đang sử dụng Xác thực ẩn danh.

Ứng dụng này được viết bằng .NET 4.0 Asp.Net bằng cách sử dụng khung MVC.

Nội dung tĩnh hoạt động tốt, ví dụ: http://server.com/content/image.jpg

Sysiternals procmontrả về 2 kết quả này cho mỗi yêu cầu: FAST IO DISALLOWED và PATH KHÔNG FOUND.

Tôi có 2 ứng dụng MVC khác chạy tốt trên cùng một máy chủ. Tôi đã kiểm tra bảo mật trên các thư mục và tất cả chúng đều khớp.

Ứng dụng chạy tốt trên hộp Server 7.0 IIS 2008.

Không có gì hiển thị trong Nhật ký sự kiện trên máy chủ liên quan đến điều này.

Kéo tóc của tôi ra đây, có mẹo khắc phục sự cố nào không?

CẬP NHẬT # 1 : Điều này chỉ nhận được nhiều WTF hơn khi tôi đào.

Nếu tôi nhấp vào Ứng dụng trong Trình quản lý IIS -> Trang lỗi -> Chỉnh sửa Cài đặt tính năng Detailed Errors, ứng dụng sẽ hoạt động từ xa. Không để điều này trên, vì vậy vấn đề chưa được giải quyết, nó chỉ gây nhầm lẫn hơn.

CẬP NHẬT # 2 : Sử dụng Fireorms, tôi thấy Trạng thái vẫn còn 401 Unauthorized, nhưng Phản hồi đang trả về HTML chính xác của ứng dụng.

CẬP NHẬT # 3 Chơi xung quanh với Truy tìm yêu cầu thất bại, đây là Dấu vết yêu cầu CẢNH BÁO gây ra 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

Cập nhật # 4 Nhật ký IIS thông thường đang hiển thị điều này:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414

Bạn đã thử chạy Truy tìm yêu cầu thất bại trên máy chủ và truy cập ứng dụng từ máy từ xa. Nếu có một thất bại, bạn nên xem nguyên nhân.
Vivek Kumbhar

@vivek xem bản cập nhật mới nhất của tôi
mxmissile

ARRG !!! Có nhưng bằng cách này một lần nữa! 2 giờ lãng phí tìm kiếm Html.RenderAction, sau đó nhận ra sử dụng Dao cạo Html.Actionđể các tìm kiếm ban đầu của tôi trở nên trống rỗng.
mxmissile

Oh nó đã được một vài năm, đoán những gì? Chỉ lãng phí 3 giờ vào sáng nay trên LẠI NÀY! Khi nào tôi sẽ học?!?!?!
mxmissile

Câu trả lời:


19

Đôi khi bạn phải lùi lại một bước ... Nguyên nhân của việc này là do tôi có một Html.RenderAction()phương thức hành động được đánh dấu bằng [Authorize]thuộc tính.


1
Đây là vấn đề của tôi, nó đã đủ bực bội để đấm một con gấu trúc (không phải là tôi sẽ làm thế). Cảm ơn mxmissile.
Khalid Abuhakmeh

4

Vì nó hoạt động cục bộ nhưng không phải từ xa, nên có vẻ như tài khoản người dùng ẩn danh không có quyền truy cập vào một cái gì đó, nhưng người dùng windows của bạn thì có. Để chứng minh điều này, hãy tắt Xác thực Windows cho trang web và xem nếu nó bị hỏng cục bộ.

Bất cứ điều gì vi phạm đều có khả năng chạy như nhận dạng trang web của bạn thay vì nhận dạng nhóm ứng dụng của bạn, nếu không, nó sẽ bị hỏng cục bộ và từ xa. Lời khuyên của tôi nếu bạn có 1 đến 1 ánh xạ các trang web vào nhóm ứng dụng hoặc bạn có môi trường đáng tin cậy cao là đặt tài khoản người dùng ẩn danh để sử dụng danh tính nhóm ứng dụng. Sau đó, bạn không cần phải lo lắng về người dùng thứ 2 để duy trì.

Bạn đã đề cập đến quá trình thám hiểm. Điều đó tốt cho việc tìm kiếm thông tin đang chạy, nhưng công cụ có khả năng phát hiện ra các lỗi bị từ chối truy cập là processmon (cũng từ sysiternals). Hãy thử, repro và chụp, sau đó tìm kiếm từ 'bị từ chối'. Nó sẽ bật lên bất kỳ vấn đề truy cập bị từ chối trên đĩa.


4

Bạn sẽ có hành vi tương tự khi bạn có một bộ lọc cho ủy quyền tùy chỉnh kế thừa từ AuthorizeAttributevà một hoặc nhiều lệnh gọi OnAuthorizationphương thức, với một trong số chúng được đặt AuthorizationContext.Resultthành `httpUnauthorizedResult '


4

Vì một số lý do, điều này đã khắc phục vấn đề của tôi.

  1. Bấm vào trang web trong IIS.
  2. Xác thực nhấp đúp
  3. Nhấp chuột phải và chọn Cài đặt nâng cao
  4. Bỏ chọn "Bật xác thực chế độ hạt nhân"

2

Bạn đã kiểm tra các cài đặt theo quy tắc Ủy quyền? Nếu bất kỳ ai cũng có thể truy cập trang này (dường như là mục tiêu của bạn), hãy đảm bảo rằng bạn có quy tắc "Cho phép" có "Tất cả người dùng" trong cột người dùng.

Sau đó, trong "Xác thực", đảm bảo không có xung đột và chỉ bật Xác thực ẩn danh.

Mong rằng sẽ giúp.


1
Cho phép - Tất cả người dùng - Được kế thừa
mxmissile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.