Chuyển đến nôi dung chính

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng (tiếng Anh).

Khi bạn đăng ký với trang developerWorks lần đầu tiên, một tiểu sử của của bạn được tạo ra. Chọn các thông tin về tiểu sử của bạn (tên, nước/vùng, và nơi làm việc) đã được hiện lên màn hình, thông tin này sẽ được hiện kèm với nội dung mà bạn đăng tải. Bạn có thể cập nhật thông tin này bất kỳ lúc nào.

Thông tin gửi đi được đảm bảo an toàn.

  • Đóng [x]

Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng (tiếng Anh).

Thông tin gửi đi được đảm bảo an toàn.

  • Đóng [x]

Hiểu biết về Đặc tả các dịch vụ Web, Phần 4: Các dịch vụ Web-An ninh

Nicholas Chase, Tác giả tự do, Site Dynamics Interactive Communications
Nicholas Chase đã phát triển trang web cho các công ty lớn như Lucent Technologies, Sun Microsystems, Oracle, và Tampa Bay Buccaneers. Nick đã từng là một giáo viên vật lý ở trường phổ thông, một nhà quản lý thiết bị phóng xạ mức thấp, một nhà biên tập tạp chí khoa học viễn tưởng trực tuyến, một kỹ sư đa phương tiện, một hướng dẫn của Oracle, và một trưởng phòng công nghệ của một công ty tương tác truyền thông. Nick là tác giả của một số sách

Tóm tắt:  Có một vài (nếu có) hệ thống mức doanh nghiệp không đòi hỏi một hình thức bảo mật này hay khác. Trong các dịch vụ Web, quá trình này phức tạp hơn trong các lĩnh vực hoạt động khác do bản chất xuyên quốc gia, phân tán của các dịch vụ Web. Hướng dẫn này, Phần 4 của loạt bài Hiểu biết về các đặc tả của các dịch vụ Web, giải thích các khái niệm đằng sau Các dịch vụ Web-An ninh (WS-Security) và các tiêu chuẩn liên quan như Chữ ký XML (XML Signature), kết hợp để làm cho an ninh trong thế giới các dịch vụ Web không chỉ có khả năng, mà là thực tế.

Xem thêm bài trong loạt bài này

Ngày:  10 11 2010
Mức độ:  Trung bình

Hoạt động:  10562 lần đọc

Tổng quan

Trước khi chúng ta nói về việc bảo vệ một dịch vụ, thật có ích để biết chính xác các phần nào tạo nên dịch vụ đó để biết những gì đã được thực hiện.

Câu chuyện tiếp tục cho đến nay

Loạt bài hướng dẫn này tiếp tục các hoạt động của các nhân viên của tờ báo Daily Moon (Mặt Trăng hàng ngày). Tờ báo này đã phát hiện ra cách làm việc mới dưới dạng các dịch vụ Web. Tất cả cách làm việc mới này đã bắt đầu trong phòng chuyên mục rao vặt. Phòng này đã quyết định cho phép những người khác truy cập vào hệ thống của mình thông qua việc sử dụng các thông báo SOAP -- các thông báo XML có thể được gửi qua HTTP.


Ví dụ, một yêu cầu cho một số trong các đoạn quảng cáo được phân loại thành thể loại con "để bán" có thể trông giống như Liệt kê 1.



Liệt kê 1. Một thông báo SOAP ví dụ
                    
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/SOAP-envelope"> 
 <env:Header>
 </env:Header>
 <env:Body>
  <cms:getNumberOfArticles xmlns:cms="http://www.daily-moon.com/cms">
    <cms:category>classifieds</cms:category>
    <cms:subcategory>forsale</cms:subcategory>
  </cms:getNumberOfArticles>
 </env:Body>
</env:Envelope>

Thông báo tổng thể được gọi là Phong bì (Envelope), với các nội dung trong đó bao gồm phần Tiêu đề (Header) và phần Thân (Body). Tiêu đề chứa thông tin về chính thông báo đó, chẳng hạn như thông tin định tuyến, hoặc các thông tin dự kiến do "các phương tiện trung gian SOAP" xử lý hoặc dịch vụ giữa người gửi và người nhận cuối có thể xử lý thông báo. (Trong trường hợp này, hãy xem bất kỳ trong số các tiêu đề đó, nhưng đây là nơi thông tin an ninh của chúng ta sẽ gửi đi). Phần Thân của thông báo bao gồm "tải trọng" có các dữ liệu thực sự được chuyển tới dịch vụ Web.

Trong trường hợp này, trọng tải là phần tử getNumberOfArticles và nội dung của nó.

Gene và Frances, từ bộ phận IT của tờ báo này, đã ráp một hệ thống vào với nhau để phục vụ các yêu cầu của các dịch vụ web, cũng như cơ sở hạ tầng để phát hiện và tự động tạo ra các ứng dụng khách cho các dịch vụ. Bây giờ chủ báo, Rudy, đang nhấn mạnh rằng họ tìm thấy cách để ngăn chặn truy cập trái phép vào các hệ thống này.


Nhu cầu an ninh

Đặc tả SOAP cơ bản không lo liệu cho việc bảo vệ các thông báo, mà để lại nhiệm vụ đó cho các đặc tả mở rộng. Vấn đề nằm ở tính chất của một ứng dụng của các dịch vụ Web. Trong hầu hết các trường hợp, chúng ta đang đề cập đến SOAP trên HTTP, có nghĩa là mỗi thông báo phải đi qua một hoặc nhiều nút trung gian, và bất kỳ một trong số các nút đó có thể đọc và/hoặc thay đổi một thông báo. Và điều đó thừa nhận rằng bản thân yêu cầu SOAP đã là một yêu cầu trực tiếp. Trong một số trường hợp, các thông báo SOAP được thiết kế đặc biệt để đi qua nhiều hơn một nút trước khi tới điểm đến cuối cùng của chúng.

Kết quả cuối cùng là chúng ta cần một cách để ngăn chặn một ai đó không phải là người nhận được dự kiến đọc các thông tin nhạy cảm, để ngăn chặn việc nghe trộm. Chúng ta cũng cần một cách để ngăn chặn một ai đó không phải là người gửi được dự kiến gửi đi các thông báo, để ngăn chặn truy cập trái phép.

Đặc tả SOAP cung cấp một phương tiện để bổ sung các thông tin an ninh -- chúng ta thêm thông tin vào một phần tử Tiêu đề của Phong bì -- nhưng không xác định các thông tin nên là gì. Để bảo vệ nó, chúng ta cần Các dịch vụ Web-An ninh (WS-Security).


Các phần về Các dịch vụ Web-An ninh

Có ba vấn đề chủ yếu cần có trong việc đảm bảo an ninh cho các trao đổi thông báo SOAP và Các dịch vụ Web-An ninh cung cấp các câu trả lời cho tất cả các vấn đề đó, nhưng không trực tiếp. Trong thực tế, Các dịch vụ Web-An ninh là một đặc tả không nói về cách bảo vệ thông báo, mà nói về cách giúp cho người nhận biết cách bạn đã bảo vệ thông báo. Để thực hiện việc bảo vệ trên thực tế, Các dịch vụ Web-An ninh tham chiếu các đặc tả bổ sung. Hãy xem Các dịch vụ Web-An ninh hoạt động như thế nào.

Vấn đề đầu tiên là nhận dạng và xác thực ứng dụng khách. Vì có rất nhiều cách khác nhau để tạo ra các thẻ an ninh, nên Các dịch vụ Web-An ninh không xác định bất kỳ phương tiện cụ thể nào, mà định nghĩa cách các thẻ an ninh khác nhau sẽ được chuyển giao trong các thông báo SOAP. Nói cách khác, nó cho phép người nhận biết cách trích xuất các thẻ an ninh khỏi thông báo để xử lý.

Vấn đề thứ hai là đảm bảo tính toàn vẹn của thông báo. Các dịch vụ Web-An ninh sử dụng các chữ ký số cho việc đó, sử dụng đặc tả Chữ ký XML hơn là phát minh ra một vài thứ mới. Chữ ký XML là một khuyến nghị của W3C cung cấp một cơ chế cho việc ký bằng số các tài liệu XML.

Vấn đề thứ ba là giữ cho thông báo khỏi bị nghe trộm trong khi nó chuyển tiếp. Một lần nữa, Các dịch vụ Web-An ninh sử dụng một tiêu chuẩn W3C khác, lần này là Mã hóa XML (XML Encryption), cung cấp một cơ chế để mã hóa các tài liệu XML.

Trong hướng dẫn này, chúng ta sẽ xem việc sử dụng các tiêu chuẩn này ảnh hưởng đến các thông báo SOAP thực tế thường dùng như thế nào, khi Frances và Gene thực hiện bảo vệ dịch vụ của chuyên mục Rao vặt hiện có.


Dịch vụ hiện tại

Trước khi chúng ta xem xét thực hiện các thay đổi, thật có ích để xem nơi Gene và Frances sẽ bắt đầu. Dịch vụ của của chuyên mục Rao vặt được triển khai thực hiện bằng cách sử dụng Axis2, có nghĩa là nó có chứa trong một tệp *.aar. Tệp CMSService.aar có ba tệp, như trong Liệt kê 2.


Liệt kê 2. Các nội dung của dịch vụ đầu tiên
                    
CMSService.class
meta-inf/Manifest.MF

meta-inf/services.xml

Bản thân lớp này là đơn giản, nó nhận một thông báo SOAP liệt kê một thể loại và trả về một thông báo SOAP bao gồm một số các đoạn quảng cáo cho thể loại đó. Nó thực hiện chức năng này khi được tệp services.xml định nghĩa (xem Liệt kê 3).


Liệt kê 3. Tệp services.xml đầu tiên
                    
<service name="CMSService">

    <description>
        This is a sample Web Service for the newspaper's 
        Content Managment System.
    </description>

    <parameter name="ServiceClass" 
               locked="false">CMSService</parameter>

    <operation name="getNumberOfArticles">
        <messageReceiver class=
"org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
    </operation>

</service>

Việc bảo vệ dịch vụ đòi hỏi chỉ chạm vào tệp services.xml; Gene và Frances sẽ không hề phải chạm vào lớp Java thực tế.


Ứng dụng khách hiện tại

Bản thân ưng dụng khách là khá đơn giản và chỉ cần tạo và hiển thị yêu cầu, như trong Liệt kê 4:


Liệt kê 4. Lớp ứng dụng khách đầu tiên
                    
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.ConfigurationContextFactory;

public class ClassifiedClient {
    private static EndpointReference targetEPR = 
           new EndpointReference(
               "http://localhost:8888/axis2/services/CMSService");

    public static OMElement getNumOfArticlesOMElement() {
        SOAPFactory fac = OMAbstractFactory.getSOAP12Factory();
        OMNamespace omNs = fac.createOMNamespace(
                "http://daily-moon.com/cms", "cms");
        OMElement method = fac.createOMElement("getNumberOfArticles",
                                                omNs);
        OMElement value = fac.createOMElement("category", omNs);
        value.addChild(fac.createOMText(value, "classifieds"));
        method.addChild(value);

        return method;
    }

    public static void main(String[] args) {
        try {
            OMElement payload = 
               ClassifiedClient.getNumOfArticlesOMElement();
  
            Options options = new Options();
            options.setTo(targetEPR);
            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

            ServiceClient sender = new ServiceClient();

            sender.setOptions(options);
            OMElement result = sender.sendReceive(payload);

            String response = result.getText();
            System.out.println("There are "+response+
                               " classifieds at the moment.");
        } catch (Exception e) { 
        	System.out.println(e.toString());
        }
    }
}

Lưu ý rằng Gene đã thay đổi cổng điểm cuối thành 8888, thay cho 8080, cổng mà máy chủ Geronimo đang nghe. Gene làm điều đó để chèn một bước bổ sung sao cho anh ta có thể nhìn thấy các thông báo bay qua bay lại.


Xem các thông báo

Để xem các thông báo SOAP thực tế, hãy tải TCPMon từ http://ws.apache.org/commons/tcpmon/download.cgi. (Đúng, Axis2 đi kèm với SOAPMonitor, nhưng Gene đã phát hiện ra cách phức tạp nằm ngoài những rắc rối trong việc thiết lập những thứ đó, nó cho thấy SOAP nhưng không nhất thiết phải là các thông báo thô, mà chúng ta rõ ràng sẽ muốn xem).

Sau khi tải về, giải nén ứng dụng đó và chạy tệp tcpmon-1.0-bin\build\tcpmon.bat. Nhấn vào tab Admin và tạo một người nghe mới, như trong Hình 1.


Hình 1. tab Admin của TCPMon
tab Admin của TCPMon

Chọn 8888 là một cổng nghe và xác định 8080 là cổng đích, để cho TCPMon nằm giữa ứng dụng khách và máy chủ. Nhấn Add và sau đó nhấn vào thẻ Port 8888. Nhấn vào hộp chọn XML Format. Bây giờ khi Frances thực hiện ứng dụng khách, Gene có thể thấy yêu cầu và đáp ứng, như trong Hình 2.


Hình 2. Yêu cầu và đáp ứng đầu tiên
Yêu cầu và đáp ứng đầu tiên

Trước khi đi tiếp, chúng ta hãy xem xét nhanh các thông báo thực tế, để chúng ta có thể biết những gì thay đổi.


Các thông báo

Bản thân các thông báo rất đơn giản. Yêu cầu, như đã thấy trong Liệt kê 5, chỉ yêu cầu số lượng các đoạn quảng cáo được phân loại trong hệ thống:


Liệt kê 5. Yêu cầu đầu tiên
                    
<?xml version='1.0' encoding='UTF-8'?>
   <soapenv:Envelope
 xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Header />
      <soapenv:Body>
         <cms:getNumberOfArticles 
                    xmlns:cms="http://daily-moon.com/cms">
            <cms:category>classifieds</cms:category>
         </cms:getNumberOfArticles>
      </soapenv:Body>
   </soapenv:Envelope>
   

Đáp ứng cũng không kém phần đơn giản, như bạn có thể thấy trong Liệt kê 6:



Liệt kê 6: Đáp ứng đầu tiên
                    

<?xml version='1.0' encoding='UTF-8'?>
   <soapenv:Envelope xmlns:soapenv=
           "http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Header />
      <soapenv:Body>
         <resp:numberOfArcticles 
               xmlns:resp="http://daily-moon.com/cms/"  
               xmlns:tns="http://ws.apache.org/axis2"
                            >42</resp:numberOfArcticles>
      </soapenv:Body>
   </soapenv:Envelope>

Trong cả hai thông báo này, Frances sẽ đặt thông tin bổ sung trong phần tử Tiêu đề (Header) cho máy chủ (hoặc ứng dụng khách) xử lý.

Vào lúc này, bất cứ ai có thể gửi một yêu cầu đến dịch vụ và nhận được một đáp ứng và đó là điều làm cho Rudy không an tâm. Rudy muốn dịch vụ đó được thiết lập sao cho chỉ có những người dùng được ủy quyền mới có thể nhận được thông tin và sao cho các đối thủ cạnh tranh không thể thu chặn các thông tin. Rudy suy nghĩ rằng đây là một hệ thống bằng chứng-theo- khái niệm tốt. Rudy thực sự càng lo ngại hơn về các hệ thống phức tạp hơn, chẳng hạn như những hệ thống thêm nội dung hoặc truy cập vào hệ thống kế toán. Nhưng các khái niệm cũng như nhau thôi.

Để cung cấp an ninh, Gene và Frances cần sử dụng mã hóa và công nghệ liên quan của nó, các chữ ký.

2 của 11 | Trang trước | Trang sau

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=SOA và dịch vụ Web
ArticleID=579899
TutorialTitle=Hiểu biết về Đặc tả các dịch vụ Web, Phần 4: Các dịch vụ Web-An ninh
publish-date=11102010
author1-email=
author1-email-cc=