5

Tôi có ứng dụng ASP.NET hiện có triển khai thực hiện Xác thực biểu mẫu trên toàn trang web. Ứng dụng được triển khai trong nhiều trường hợp (ví dụ: customer1, customer2, test, dev, v.v ...), với một cơ sở dữ liệu riêng biệt cho mỗi cá thể. SSL đang được phát. Cấu hình thể hiện là thông qua một tệp cấu hình XML.Dịch vụ web ASP.NET bên trong Ứng dụng xác thực biểu mẫu

Tôi có yêu cầu mới để cho phép tải lên/tải xuống dữ liệu nhất định mà tôi muốn triển khai dưới dạng dịch vụ web công khai.

Ý tưởng ban đầu của tôi ở đây là vô hiệu hóa chọn lọc xác thực biểu mẫu cho thư mục con của ứng dụng (ví dụ: ~/Services) và sau đó thực hiện xác thực thông qua tiêu đề SOAP hoặc tương tự.

Tuy nhiên, tôi không tìm cách tắt các biểu mẫu có chọn lọc auth.

Câu hỏi: Có cách nào để thực hiện việc này không? Tôi đã thử các < vị trí > thẻ trong cấu hình web để avail không có.

Nếu không, đề xuất của bạn về cách thiết lập điều này? Tôi có thể nghĩ ra các tùy chọn sau:

1) Tạo dự án "Dịch vụ" mới trong giải pháp của tôi, sau đó cấu hình ứng dụng IIS ASP.NET riêng biệt trên thư mục đó trong từng trường hợp. (Pro: dễ dàng truy cập vào cấu hình cá thể, có thể cần thiết trong tương lai. Con: gánh nặng cấu hình cho mỗi cá thể có liên quan).

2) Tạo giải pháp "Dịch vụ" riêng biệt tham chiếu các assembly cần thiết từ giải pháp ứng dụng và lưu trữ nó dưới dạng ứng dụng ASP.NET riêng biệt. Sau đó, tra cứu chuỗi kết nối db dựa trên UserName được cung cấp trong SOAP Header. (Pro: ứng dụng duy nhất để cấu hình trong IIS. Con: Không dễ dàng truy cập vào cấu hình ví dụ.)

3) ??

Làm rõ: Tôi đã nhìn thấy câu trả lời ở đây: Override ASP.NET forms authentication for a single page, nhưng việc sử dụng thẻ vị trí không giúp ích (yêu cầu dịch vụ web vẫn được chuyển hướng). Các phần có liên quan trong web.config của tôi trông như thế này:

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx"/> 
    </authentication> 
    <authorization> 
    <deny users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 

<location path="~/Services/MyService.asmx"> 
    <system.web> 
    <authentication mode="None" /> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 
+3

Mỗi lần tôi sử dụng thẻ vị trí trong web.config đường dẫn đã ở dạng "Dịch vụ/MyService.asmx" không phải "~/Services/MyService.asmx" bạn đã thử chỉ định nó không có dấu gạch chéo? –

+0

Đó là nó. Tôi có thể thề là tôi đã thử 3 phiên bản khác nhau. Lần này tôi đóng trình duyệt và giải pháp của bạn hoạt động hoàn hảo. – dividius

Trả lời

4

Tôi sẽ nghĩ tag vị trí sẽ làm việc, nơi bạn chỉ định thư mục dịch vụ và cho phép tất cả người dùng, một cái gì đó như:

<location path="services"> 
     <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     </system.web> 
</location> 

Nhưng bạn nói rằng đã không làm việc, có bạn đã thử đặt một file web.config trong thư mục dịch vụ và vô hiệu hóa các hình thức xác thực và cho phép tất cả người dùng trong tập tin đó?

+0

Như đã nêu ở trên, sai lầm mà tôi đưa ra là chỉ định "~ \ Dịch vụ" cho đường dẫn, thay vì chỉ "Dịch vụ" – dividius

+0

Rất vui khi hoạt động, xấu hổ asp.net không nhất quán ở nơi bạn có thể sử dụng ~/đã bắt được tôi vào một vài dịp –

0

Bạn cũng có thể có tệp web.config (ghi đè) trong thư mục dịch vụ với bộ điều khiển truy cập được đặt thành ẩn danh.

0

những gì đã hiệu quả đối với tôi là cho phép người dùng tất cả người dùng truy cập trong thư mục chứa dịch vụ web của tôi. Trước hết tôi đã thêm tệp cấu hình vào thư mục đó và chèn mã bên dưới để cho phép tất cả người dùng.

<authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
Các vấn đề liên quan