2009-05-09 30 views
7

Làm thế nào để bạn bảo mật một Dịch vụ Web WCF được bật Silverlight bằng SSL? Tôi đã thử thiết lập nó tương tự như một dịch vụ WCF thường xuyên được bảo đảm bằng SSL, nhưng nó dường như không hoạt động. Bạn đặt gì trong số Web.Config và bạn đặt gì trong số ServiceReferences.ClientConfig của Silverlight?Làm thế nào để bảo mật một Dịch vụ Web WCF được bật Silverlight với SSL?

Tôi nhận thấy rằng trong tệp ServiceReferences.ClientConfig của ứng dụng khách Silverlight, thẻ "Ràng buộc" chỉ cho phép basicHttpBinding và NOT wsHttpBinding. Điều này có nghĩa là bạn không thể bảo đảm một Dịch vụ WCF được bật Silverlight? Nếu vậy có cách tiếp cận tốt hơn để bảo vệ nó?

Trả lời

-2

WS * không được hỗ trợ trong Silverlight - về cơ bản thay đổi URL trong cấu hình khách hàng để trở thành một địa chỉ https: // url - đó là tất cả các bạn có thể làm

+0

Tôi cố gắng đó, các dịch vụ sau đó sẽ không kết nối. – Yttrium

3

trong file ServiceReferences.ClientConfig của Silverlight ứng dụng khách mà thẻ "Ràng buộc" chỉ cho phép basicHttpBinding và NOT wsHttpBinding. Điều này có nghĩa là bạn không thể bảo đảm một Dịch vụ WCF được kích hoạt Silverlight ?

Không, điều đó không có nghĩa là. Bạn có thể có số basicHttpBinding và vẫn chỉ định mức độ bảo mật ở mức vận tải (HTTPS với SSL) cho nó. Đó không phải là một vấn đề.

Marc

PS: Nhiều liên kết trong số đó cung cấp cho bạn thông tin chi tiết hơn và cụm từ "AHA!" :-)

+0

Cảm ơn! Mặc dù tôi đang bối rối như những gì tôi đặt trong tập tin Web.Config lưu trữ các dịch vụ? Là nó chỉ basicHttpBinding với an ninh giao thông? Tôi đã thử nó và nó trả về một lỗi "Không tìm thấy". – Yttrium

+0

Máy chủ của bạn có lưu trữ dịch vụ có cài đặt chứng chỉ SSL hay không? Nếu bạn muốn sử dụng bảo mật mức truyền tải SSL, SSL ở cấp độ truyền tải phải được thiết lập chính xác trước. –

+0

Có, trang web có SSL hoạt động, tôi có thể truy cập dịch vụ .ASMX bằng bảo mật giao thông và trỏ nó đến https trong tệp cấu hình Silverlight. Nhưng tôi không thể cho cuộc sống của tôi làm cho nó tìm thấy một dịch vụ WFC Silverlight-Enabled thông qua https với an ninh giao thông. – Yttrium

11

Có ba nơi quan trọng mà tôi cấu hình ure để sử dụng https trong các ứng dụng của riêng tôi.

Web.config

Trong thẻ hành vi bao gồm dòng này:

<serviceMetadata httpsGetEnabled="true"/> 

Đối với các thiết bị đầu cuối MEX, chắc chắn rằng bạn sử dụng giao thức https:

<endpoint address="mex" binding="mexHttpsBinding" 
      contract="IMetadataExchange" /> 

Tạo ràng buộc tùy chỉnh.Phần quan trọng là an ninh vận chuyển:

<basicHttpBinding> 
    <binding name="myServicesBinding"> 
     <security mode="Transport"/> 
    </binding> 
    </basicHttpBinding> 

Bạn cũng có thể bao gồm các công cụ cho phép thông thường:

<authorization> 
    <allow users="?"/> 
    <deny users="*"/> 
</authorization> 

Silverlight

Trên cuối Silverlight, hoặc trỏ ServiceReference tại bây giờ dịch vụ bảo mật hoặc thiết lập các kết nối theo cách thủ công trong mã. file ServiceReferences.ClientConfig nên có những thứ an ninh trong đó:

<security mode="Transport"/> 

Và phiên bản mã trông như thế này:

BasicHttpBinding b = new BasicHttpBinding(BasicHttpSecurityMode.Transport); 

Có những điều có thể phức tạp hơn có thể được thực hiện, nhưng điều này nên đủ tốt cho hầu hết mọi người.

3

Để tạo Silverlight-Enabled WCF Web Service sử dụng SSL, bạn phải làm các bước sau:

  1. Tạo tiêu chuẩn WCF Web Service Silverlight-Enabled sử dụng Visual Studio 2010
  2. Thay đổi 3 địa điểm của webconfig. xml:

    a. Trong serviceMetadata thay đổi httpGetEnabled thành httpsGetEnabled như sau:

    <behaviors > 
        <serviceBehaviors > 
        <behavior name="" > 
         <serviceMetadata httpsGetEnabled="true" /> 
         <serviceDebug includeExceptionDetailInFaults="false" /> 
        </behavior> 
        </serviceBehaviors> 
    </behaviors> 
    

    b. Trong thay đổi ràng buộc httpTransport thành httpsTransport:

    <bindings> 
        <customBinding> 
        <binding name="Project.Web.YourService.customBinding0"> 
         <binaryMessageEncoding/> 
         <httpsTransport/> 
        </binding> 
        </customBinding> 
    </bindings> 
    

    c. trong thiết bị đầu cuối thay đổi ràng buộc = "mexHttpBinding" để ràng buộc = "mexHttpsBinding":

    <service name="Project.Web.YourService.YourService"> 
        <endpoint address="" binding="customBinding" bindingConfiguration="Project.Web.YourService.customBinding0" 
        contract="Project.Web.YourService.YourService" /> 
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" /> 
    </service> 
    
  3. Không sử dụng ServiceReferences.ClientConfig. Tạo mọi thứ trong mã đằng sau - đó là dễ dàng triển khai trên máy chủ:

    CustomBinding binding = new CustomBinding(new BinaryMessageEncodingBindingElement(), new HttpsTransportBindingElement());   
    YourServiceReference.YourServiceClient service = new YourServiceReference.YourServiceClient (binding, new EndpointAddress(new Uri("https:yourhostname/YourService.svc").AbsoluteUri));   
    service.YourMethodCompleted += new EventHandler<YourServiceReference.YourMethodCompleted EventArgs>(service_YourMethodCompleted); 
    service.YourMethodAsync(); 
    
Các vấn đề liên quan