2011-10-06 35 views
12

Tôi có một ứng dụng web ASP.NET được viết bằng VB.NET. Một phần của ứng dụng thực hiện cuộc gọi AJAX đến một tệp ASMX nội bộ, từ đó thực hiện cuộc gọi đến một dịch vụ web từ xa chỉ là một tệp ASMX duy nhất. Thông thường điều này hoạt động tốt và đã được triển khai một vài lần và hoạt động tốt. Tuy nhiên, một khách hàng đang nhận được thông báo từ cuộc gọi AJAX:Yêu cầu HTTP không được ủy quyền với lược đồ xác thực ứng dụng khách 'Ẩn danh'. Tiêu đề xác thực nhận được từ máy chủ là 'NTLM'

Yêu cầu HTTP không được ủy quyền với lược đồ xác thực ứng dụng khách 'Chưa xác định'. Tiêu đề xác thực nhận được từ máy chủ là 'NTLM'.

Tôi đã xóa một số lượng lớn các trang web đang tìm cách sửa lỗi này nhưng dường như tôi không tìm thấy câu trả lời nào phù hợp với tôi.

Tôi đã không thể sao chép lỗi trên máy chủ thử nghiệm của mình, cũng giống như máy khách, Win2003 IIS6.

Dịch vụ web từ xa được triển khai trên Windows 2008 r2 - IIS7.5. Dịch vụ từ xa được triển khai chỉ sử dụng xác thực ‘Ẩn danh’. Triển khai ứng dụng khách được thiết lập với Ẩn danh và "Xác thực Windows tích hợp". Tôi đã thử thay đổi các cấp xác thực trên cả hai triển khai nhưng không thể sao chép vấn đề. Gần nhất tôi đã đến là khi tôi đặt xác thực IIS dịch vụ từ xa thành

Yêu cầu HTTP không được ủy quyền với lược đồ xác thực ứng dụng khách 'Ntlm'. Tiêu đề xác thực nhận được từ máy chủ là ''.

Trong file web.config tham chiếu đến các dịch vụ từ xa là:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="SVCMappingSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
        <message clientCredentialType="UserName" algorithmSuite="Default"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://svc.website.com/services/myService.asmx" binding="basicHttpBinding" bindingConfiguration="SVCMappingSoap" contract="SVCMappingService.SVCMappingSoap" name="SVCMappingSoap"/> 
    </client> 
</system.serviceModel> 

Tôi đã cố gắng thay đổi một số thiết lập trong phần <security> nhưng vẫn không thể bắt chước được.

+0

Tôi phát hiện ra rằng máy khách đang sử dụng máy chủ proxy. Vô hiệu hóa dịch vụ web từ xa dẫn đến thông báo lỗi tương tự trên máy khách vì vậy có vẻ như tất cả các sự cố đều bị hỏng đối với thiết lập mạng của họ. Tôi đã cấu hình ràng buộc để sử dụng proxy của họ dẫn đến thông báo - 'Máy chủ từ xa trả về một phản hồi không mong muốn: (407) Yêu cầu xác thực proxy (ISA Server yêu cầu ủy quyền để thực hiện yêu cầu. Truy cập bộ lọc Web Proxy bị từ chối.) .' Tôi đã chuyển vấn đề cho bất kỳ ai chịu trách nhiệm về thiết lập mạng của khách hàng. – SausageFingers

+0

Xin chào @Fly_Trap, bạn có thể mô tả cách proxy này giữa bạn và điểm cuối của bạn đã ảnh hưởng đến ủy quyền hay không. Tôi có một vấn đề tương tự ngay bây giờ, có vẻ như bạn có thể giúp tôi. –

+0

@Johnny_D, rất tiếc là tôi không biết proxy được định cấu hình như thế nào. – SausageFingers

Trả lời

19

Tôi không chắc chắn về tổng số thiết lập máy chủ của bạn.

<security mode="None"> 
    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
</security> 

thay vì một trên xin vui lòng thử với cấu hình dưới đây

<security mode="TransportCredentialOnly"> 
    <transport clientCredentialType="Ntlm"/> 
    <message clientCredentialType="UserName" algorithmSuite="Default"/> 
</security> 

xin vui lòng đi qua bên dưới liên kết, bạn có thể ý tưởng thêm về những người và bạn có thể thay đổi cấu hình dựa trên yêu cầu của bạn:

+1

Bí quyết là để đảm bảo rằng cấu hình trong WCF và mức IIS nên giống nhau. Vì vậy, theo cách khác vòng chúng ta có thể thay đổi cấp độ IIS là "vô danh". – himanshu

+0

Tôi đã thử cấu hình bảo mật đó nhưng thông báo vẫn giống nhau. Xem bình luận của tôi ở trên, tôi nghĩ rằng vấn đề là khách hàng đang sử dụng một máy chủ proxy web. – SausageFingers

+17

Nếu câu trả lời này không giải quyết được vấn đề của bạn, tại sao nó được chấp nhận? –

2

tôi đã phải thay đổi mặc định được tạo ra

 <security mode="Transport"/> 

vào

 <security mode="Transport" > 
     <transport clientCredentialType="Ntlm"/> 
     </security> 
+0

Điều này đã giải quyết được vấn đề của tôi. Cảm ơn ngài!!! – papfan

0

Một nhận xét khác cho vấn đề này:

Nếu bạn không sử dụng HTTPS,

<security mode="Transport"/> 

không được hỗ trợ. Bạn có thể sử dụng

<security mode="TransportCredentialOnly"> 

để thay thế.

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