Hiểu biết về Đặc tả các dịch vụ Web, Phần 5: Các dịch vụ Web-Chính sách

Các dịch vụ Web có thể hỗn loạn khi thiếu một định nghĩa rõ ràng về cách sử dụng chúng. Hướng dẫn này, Phần 5 của loạt bài Hiểu biết về các dịch vụ Web, giải thích các khái niệm đằng sau Các dịch vụ Web-Chính sách (WS-Policy) và các tiêu chuẩn liên quan, chẳng hạn như Các dịch vụ Web-Chính sách An ninh (WS-SecurityPolicy), cung cấp một phương tiện để xác định các cấu hình có khả năng của một dịch vụ Web và cũng để thực thi an ninh và xác thực.

Tyler Anderson, Kỹ sư, Backstop Media

Tyler's photoTyler Anderson đã tốt nghiệp chuyên ngành Khoa học Máy tính tại trường Đại học Brigham Young năm 2004 và hiện đang tham gia học kỳ cuối chương trình đào tạo Thạc sỹ khoa học chuyên ngành Công nghệ Máy tính. Trước đó, anh đã làm việc như là một lập trình viên cơ sở dữ liệu cho DPMG.COM, và hiện tại anh đang là kỹ sư cho tập đoàn Stexar, dựa trên nền tảng Beaverton, Oregon



10 11 2010

Trước khi bạn bắt đầu

Trong hướng dẫn này bạn học về Chính sách của Các dịch vụ Web (Web Services Policy) hoặc Các dịch vụ Web-Chính sách. Tiêu chuẩn này dành cho các phát triển muốn trưng ra các dịch vụ của mình trong một môi trường và sử dụng các chính sách để xác định cách các dịch vụ Web này được phép tương tác với các ứng dụng khách và các dịch vụ khác. Thuật ngữ Các dịch vụ Web-Chính sách (WS- Policy) đề cập đến một khung công tác định nghĩa việc quản trị, ví dụ như phương pháp vận chuyển và định nghĩa an ninh, ví dụ như mức mã hóa.

Để làm theo cùng với hướng dẫn này, bạn nên có một sự hiểu biết cơ bản về SOAP, bạn có thể đạt được điều này bằng cách đọc Phần 1 của loạt bài hướng dẫn này (với phần mở rộng, bạn cũng cần có một sự hiểu biết cơ bản về XML). SOAP là thuyết bất khả tri của ngôn ngữ lập trình. Tuy nhiên, các ví dụ trong hướng dẫn này sử dụng các dự án Java™ và Axis2 Apache, mặc dù các khái niệm này áp dụng cho môi trường và ngôn ngữ lập trình bất kỳ.

Về loạt bài này

Loạt bài hướng dẫn này dạy các khái niệm cơ bản về các dịch vụ Web bằng cách tiếp tục khai thác về tờ báo hư cấu, Daily Moon (Mặt trăng hàng ngày), khi các nhân viên sử dụng các dịch vụ Web để tạo ra một hệ thống tiến trình công việc để tăng năng suất trong môi trường cạnh tranh này.

Phần 1 bắt đầu đơn giản, khi giải thích các khái niệm cơ bản đằng sau các dịch vụ Web và dạy bạn cách sử dụng SOAP, đặc tả này làm cơ sở cho hầu hết những gì sắp tới, kết nối phòng chuyên mục rao vặt với Hệ thống quản lý nội dung.

Phần 2 đưa mọi thứ tiến lên một bước xa hơn, khi giải thích cách sử dụng WSDL (Web Services Description Language - Ngôn ngữ mô tả các dịch vụ Web) để định nghĩa các thông báo được các dịch vụ Web tạo ra, cho phép nhóm làm việc tạo các dịch vụ và các ứng dụng khách kết nối với các thông báo dễ dàng hơn.

Phần 3 tìm nhóm làm việc có một số dịch vụ tại chỗ và có một mong muốn định vị các dịch vụ dễ dàng. Đáp lại, UDDI (Universal Description, Discovery and Integration - Tích hợp, khám phá và mô tả đa năng) cung cấp một đăng ký có thể tìm kiếm được của các dịch vụ có sẵn theo cách đưa ra công khai các dịch vụ riêng của họ cho những người khác.

Trong Phần 4, Rudy, chủ báo Daily Moon, đã quyết định rằng tờ báo này cần xây dựng các giao thức an ninh tốt hơn cho các dịch vụ Web để truy cập các hệ thống nội bộ của tờ báo.

Trong Phần 5, Các dịch vụ Web-Chính sách (WS-Policy), bạn sẽ thấy các thay đổi mà các nhóm làm việc cần thực hiện để truy cập các dịch vụ mới được bảo vệ đó.

Phần 6 tập trung vào tính tương thích, do các dịch vụ từ các cách hiện thực khác nhau phải được truy cập từ một hệ thống duy nhất. Phần 6 trình bày các yêu cầu và các thử nghiệm liên quan đến việc cấp chứng chỉ Các dịch vụ Web-Tính tương thích (WS-I).

Cuối cùng, phần 7 dạy cách sử dụng WS-BPEL (Ngôn ngữ thực hiện qui trình kinh doanh) để tạo các ứng dụng phức tạp từ các dịch vụ riêng biệt.

Về hướng dẫn này

Trong hướng dẫn này, hãy làm theo khi nhóm làm việc của tờ báo Daily Moon sử dụng đặc tả Các dịch vụ Web-Chính sách để quy định các chính sách mà các dịch vụ Web phải tuân theo để sử dụng các dịch vụ Web của công ty.

Theo tiến trình của hướng dẫn này, bạn sẽ:

  • Tìm hiểu cú pháp để tạo các tài liệu chính sách, cũng như cách tạo ra các chính sách riêng của bạn và cách sử dụng các xác nhận đã có khác.
  • Xem cách bạn có thể thao tác các tài liệu Chính sách (Policy) bằng cách sử dụng các đặc tính toán học của các cấu trúc XML cơ bản.
  • Sử dụng Apache Neethi, sự thực hiện Các dịch vụ Web-Chính sách không đầy đủ từ Axis2 cho phép những người dùng Axis2 thao tác và kết hợp các tài liệu chính sách.
  • Tìm hiểu cách sử dụng Các dịch vụ Web-Chính sách và WSDL cùng với nhau và học cách viết WSDL để yêu cầu các cổng tuân theo một chính sách đã quy định.

Bạn sẽ cần một vài công cụ để bắt đầu.

Các điều kiện cần trước

Nhiều thứ trong hướng dẫn này thuộc về khái niệm, nhưng để làm theo cùng với các mã sử dụng Apache Neethi để làm việc với các tài liệu Các dịch vụ Web-Chính sách, bạn sẽ cần phần mềm sau đây đã cài đặt:

Ấn bản tiêu chuẩn Java 2 (Java 2 Standard Edition) phiên bản 1.4.2 hoặc cao hơn -- Tất cả các công cụ này dựa trên Java, như là các dịch vụ và ứng dụng khách mà bạn sẽ xây dựng trong hướng dẫn này.

Apache Neethi -- Apache Neethi là những gì mà Axis2 sử dụng để tạo ra một sự biểu thị thời gian chạy của các tài liệu chính sách và để thực hiện các hoạt động tiêu chuẩn hóa, kết hợp và giao nhau trên các tài liệu chính sách.


Tổng quan

Trước khi bạn đi vào quy định các chính sách cho các dịch vụ Web, hãy xem lại kịch bản ví dụ cho đến lúc này trong loạt bài hướng dẫn này.

Câu chuyện tiếp diễn cho đến nay

Loạt bài hướng dẫn này làm theo các nhân viên của tờ báo hư cấu Daily Moon (Mặt Trăng hàng ngày) khi tờ báo chuyển nhiều hoạt động hàng ngày của mình sang một hệ thống dịch vụ trên các dịch vụ Web. Trong Phần 1, Phòng chuyên mục rao vặt đã tìm hiểu về về SOAP bằng cách tương tác với Hệ thống quản lý nội dung và trong Phần 2, họ tạo ra một dịch vụ riêng của họ và đã định nghĩa dịch vụ này bằng cách sử dụng WSDL. Sau đó trong phần 3, họ đã tìm hiểu cách tương tác với một đăng ký UDDI và hơn nữa cách tìm dữ liệu trong một đăng ký, cuối cùng đã cho phép họ tạo ra một đăng ký cho công ty để cho phép các tổ chức khác tương tác với tờ báo Daily Moon. Do Rudy đã nhấn mạnh rằng các đồng nghiệp của ông là Gene và Francis cung cấp một cách để ngăn chặn việc truy cập trái phép vào hệ thống của họ trong Phần 4, Gene và Francis đã phải triển khai thực hiện Các dịch vụ Web-An ninh cho các dịch vụ Web của họ.

Bây giờ, Rudy mới nhận ra rằng các ứng dụng khách truy cập vào dịch vụ web của họ không nhất thiết phải sử dụng các dịch vụ Web mới mà ông yêu cầu. Vì vậy, ông cần xác định các chính sách cho các dịch vụ Web liên quan đến việc có thể sử dụng các dịch vụ Web như thế nào và theo cách nào. Nói cách khác, Rudy muốn thực thi rằng các ứng dụng khách truy cập vào các dịch vụ Web của tờ Daily Moon làm như vậy theo một cách đã quy định, bảo đảm an ninh đã được gắn cho nó theo phần 4 của loạt bài này. Ông đã có Gene và Francis cho nhiệm vụ đó!

Tại sao cần sử dụng Các dịch vụ Web-Chính sách

Khung chính sách của Các dịch vụ Web hoặc Các dịch vụ Web-Chính sách, là một đặc tả cho phép một dịch vụ Web có một bộ quy tắc đó phải được tiếp nhận hoặc được tiêu dùng. Các tác giả của các ứng dụng khách sử dụng các dịch vụ Web sau đó nghiên cứu các thông tin chính sách để xem họ có thể tuân theo các chính sách này hay không. Do đó, người ta không thể viết ra một ứng dụng khách để chỉ truy cập một dịch vụ Web mà phải có một chính sách yêu cầu tất cả các thông báo được mã hóa hoặc đã ký theo một cách chắc chắn. Một ứng dụng khách cũng không thể truy cập một dịch vụ Web có một chính sách yêu cầu một dấu thời gian và gửi một thông báo mà không có dấu thời gian. Và đó là mục tiêu của Các dịch vụ Web-Chính sách: để xác định các thông tin chính sách mà người tiêu dùng các dịch vụ Web phải tuân theo.

Khi Gene ngồi xuống để triển khai thực hiện Các dịch vụ Web-Chính sách, Gene phát hiện ra một vấn đề. Axis2 chưa hỗ trợ đầy đủ cho Các dịch vụ Web-Chính sách. Thành phần Apache Neethi, xử lý Các dịch vụ Web-Chính sách, đọc và hiểu các chính sách, nhưng Axis2 không cung cấp một cách cho dịch vụ để đạt tới các thông tin đó ... lúc này.

Tuy nhiên, đó chỉ là kế hoạch. Vì vậy, Gene và Francis quyết định tiến lên như thể đã có sự hỗ trợ tại chỗ, sao cho họ sẽ hoàn toàn thông thạo chủ đề này và sẵn sàng để thực hiện khi sự hỗ trợ trở nên có sẵn. Rudy đồng ý rằng thời gian cũng sẽ được sử dụng đúng, căn cứ vào tầm quan trọng của Các dịch vụ Web-Chính sách với thế giới sắp tới của SOA mà ông đã đọc.

Một chính sách trông giống như thế nào

Bạn phải biết một chính sách trông giống như thế nào! Vâng, nó ở đây. Trước tiên bạn bắt đầu với một tài liệu chính sách đơn giản, như thể hiện trong Liệt kê 1.

Liệt kê 1. Tài liệu chính sách đầu tiên mà bạn đã từng thấy
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sec="http://schemas.xmlsoap.org/ws/2002/12/secext" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sec:SecurityToken>
        <sec:TokenType>sec:X509v3</sec:TokenType>
      </sec:SecurityToken>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Về cơ bản, một dịch vụ Web khi sử dụng tệp chính sách này có một yêu cầu cho các ứng dụng khách giao dịch với nó: một thẻ an ninh kiểu X509v3 (để biết thêm thông tin về các thẻ an ninh, xem Tài nguyên). Tiếp theo, bạn sẽ thấy làm thế nào để có một chính sách hoặc bộ các chính sách tăng cường Các dịch vụ Web-An ninh.

Cách Các dịch vụ Web-Chính sách tăng cường Các dịch vụ Web-An ninh

Các dịch vụ Web-Chính sách và Các dịch vụ Web-An ninh liên quan chặt chẽ với nhau. Trong thực tế, có một đặc tả Các dịch vụ Web-Chính sách An ninh (WS-SecurityPolicy) có chứa một số xác nhận có thể có trong các tài liệu Các dịch vụ Web-Chính sách, bởi vì có một số phương tiện và phương thức để triển khai thực hiện an ninh và do đó một chính sách cần tồn tại các kiểu xác nhận đó để chúng có thể được bao gồm trong các chính sách. Việc tạo các chính sách yêu cầu một số kiểu mã hóa cụ thể, việc ký hoặc yêu cầu dấu thời gian sẽ giúp củng cố an ninh của một dịch vụ Web bởi vì không có thông báo gửi đến nào có thể nhận được một đáp ứng mong muốn từ một dịch vụ Web được bảo vệ bằng các chính sách được quy định trừ khi các ứng dụng khách làm theo các chính sách được dịch vụ Web cung cấp. Francis rất thích ý tưởng này. Tất cả những khó khăn sẽ sinh ra cái gì nếu không có cách nào để thực thi nó? Hoan hô Các dịch vụ Web-Chính sách!

Thật tuyệt! Hãy đi sâu vào với Gene và Francis, ban đầu tạo các tài liệu chính sách như thế nào.


Xây dựng các tài liệu Các dịch vụ Web-Chính sách

Bạn đã thấy trong Liệt kê 1 là một tài liệu chính sách là XML giống như hầu hết các tài liệu các dịch vụ Web khác và trong phần này, bạn có thể học cách xây dựng tài liệu riêng của mình bằng cách học cú pháp và những xác nhận nào có sẵn cho bạn rồi.

Thuật ngữ

Dưới đây là một vài từ vựng mà tất cả các chuyên gia Các dịch vụ Web-Chính sách, bao gồm cả Francis và Gene, nên biết:

Chính sách (Policy)
Một danh sách các lựa chọn chính sách.
Lựa chọn chính sách (Policy alternative)
Chứa các xác nhận chính sách. Ở dạng tiêu chuẩn, một chính sách có chứa một danh sách các lựa chọn chính sách được quy định trong wsp:All tags, có nghĩa là một ứng dụng khách tiếp sau chính sách có thể chọn để làm theo bất kỳ các lựa chọn chính sách có sẵn nào. Ứng dụng khách có thể chọn một sự lựa chọn, nhưng nó phải tuân theo tất cả các chính sách với một lựa chọn. Bạn sẽ thấy nhiều hơn nữa về cách điều này hoạt động sau đây trong phần này.
Xác nhận chính sách (Policy assertion)
Biểu thị một yêu cầu hoặc khả năng. Ví dụ, một sự xác nhận chính sách có thể yêu cầu một kiểu mã hóa cụ thể được sử dụng trong việc mã hoá dữ liệu truyền. Ở dạng tiêu chuẩn, xác nhận chính sách được liệt kê trong một lựa chọn chính sách.
Kiểu xác nhận chính sách (Policy assertion type)
Một lớp các xác nhận chính sách. Ví dụ, <sec:SecurityToken> như trong Liệt kê 1 dưới dạng tiêu chuẩn hoặc ngắn gọn.
Biểu thức chính sách (Policy expression)
Biểu thị XML của một chính sách, như trong Liệt kê 1, dưới dạng tiêu chuẩn hoặc rút gọn.
Chủ đề chính sách (Policy subject)
Một thực thể hoặc đối tượng mà một chính sách có thể được áp dụng với nó.
Phạm vi chính sách (Policy scope)
Một bộ các đối tượng mà chính sách có thể được áp dụng với nó.
Đính kèm chính sách (Policy attachment)
Cách mà các chính sách có liên quan với một hoặc nhiều phạm vi chính sách.

Xem Tài nguyên với một bài viết tổng quan trình bày Các ứng dụng Web-Chính sách. Bây giờ bạn sẽ xem xét việc tạo các tài liệu chính sách ở dạng tiêu chuẩn.

Dạng tiêu chuẩn

Biểu thức chính sách dạng tiêu chuẩn là cú pháp được quy định trong đặc tả Các ứng dụng Web-Chính sách. Tài liệu chính sách đơn giản nhất là một tài liệu rỗng: <wsp:Policy />

Tuy nhiên, điều này không phải rất có ích. Tiếp theo, hãy khai triển tài liệu trong khi vẫn giữ nó rỗng (xem Liệt kê 2.).

Liệt kê 2. Một tài liệu chính sách rộng ở dạng tiêu chuẩn
<wsp:Policy ...>
  <wsp:ExactlyOne>
    <wsp:All>
    </wsp:All>
    <wsp:All>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Tài liệu chính sách trong Liệt kê 2 xác định một chính sách với hai lựa chọn chính sách không chứa các xác nhận chính sách nào. Bây giờ nhìn lại Liệt kê 1, có chứa một xác nhận chính sách duy nhất.

Lưu ý rằng các sự xác nhận chính sách từ Liệt kê 1 không hợp lệ, nhưng được hiển thị ở đây làm ví dụ. Tài liệu này có hai lựa chọn chính sách thay thế: một sự lựa chọn chỉ có một sự xác nhận chính sách và một sự lựa chọn khác có hai sự xác nhận chính sách. Như vậy, việc gọi ứng dụng khách của tờ báo khác có thể chọn tuân thủ sự lựa chọn chính sách có chứa một sự xác nhận chính sách, DummyAssertion1, hoặc sự lựa chọn chính sách khác có chứa sự xác nhận chính sách, DummyAssertion1DummyAssertion2.

Sau đó, bạn xem cách tham chiếu các xác nhận chính sách đã định nghĩa trong đặc tả Các dịch vụ Web-Chính sách An ninh (WS-SecurityPolicy).

Các dịch vụ Web-Chính sách An ninh

Đặc tả Các dịch vụ Web-Chính sách An ninh có chứa một số xác nhận chính sách và các kiểu xác nhận chính sách. Hiện có một số xác nhận chính sách được quy định trong đặc tả này, bao gồm như sau:

SignedParts (Các phần đã ký)
Chỉ rõ các phần nào của một thông báo, chẳng hạn như tiêu đề, phần thân và v.v, phải được ký.
SignedElements (Các phần tử đã ký)
Chỉ rõ các phần nào trong một thông báo phải được ký.
EncryptedParts (Các phần đã mã hóa)
Tương tự như SignedParts, trừ yêu cầu mã hóa.
EncryptedElements (Các phần tử đã mã hóa)
Tương tự như SignedElements, trừ yêu cầu mã hóa.
Token assertions (Các xác nhận thẻ)
Một số xác nhận thẻ được liệt kê trong tài liệu Các dịch vụ Web-Chinh sách An ninh (xem Tài nguyên với một liên kết) để xác định kiểu thẻ nào có trong các thông báo.
Properties (Các đặc tính)
Một số đặc tính cũng có thể được thiết lập, ví dụ như các thuật toán mã hóa hay một yêu cầu dấu thời gian.

Bây giờ, Gene và Francis có thể tạo một tài liệu chính sách có liên quan đến các dự án dịch vụ Web của mình, sử dụng đặc tả Các dịch vụ Web-Chính sách An ninh.

Xây dựng một chính sách khi sử dụng đặc tả Các dịch vụ Web-Chính sách An ninh

Bây giờ, với ý định xây dựng một chính sách cho tờ Daily Moon. Francis bắt đầu một chính sách nhỏ, như trong Liệt kê 3.

Liệt kê 3. Xây dựng một chính sách cho tờ báo
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Tài liệu này chứa một sự xác nhận chính sách đơn yêu cầu bao hàm một thẻ an ninh cụ thể. Nếu chính sách này đã được gắn liền với một dịch vụ Web, các ứng dụng khách muốn giao dịch với dịch vụ Web đó buộc phải gửi các thẻ an ninh của kiểu được quy định trong chính sách, trong trường hợp này là X509v3. Gene muốn thêm chính sách bằng cách xác định việc ký, mã hóa, dấu thời gian và các xác nhận chính sách thẻ tên người dùng (xem Liệt kê 4).

Liệt kê 4. Thêm vào chính sách của tờ báo
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" >
...
      </sp:SecurityToken>
      <sp:UsernameToken /> 
      <sp:SignedParts /> 
      <sp:EncryptedParts> 
          <sp:Body /> 
      </sp:EncryptedParts> 
      <sp:TransportBinding> 
          <sp:IncludeTimeStamp /> 
      </sp:TransportBinding>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Dòng có sp:WssUsernameToken11 yêu cầu một thẻ tên người dùng. <sp:SignedParts /> yêu cầu toàn bộ thông báo được ký. Cấu trúc sp:EncryptedParts của XML chứa một thẻ <sp:Body />, có nghĩa rằng chỉ yêu cầu phần thân được mã hóa. Cuối cùng, cấu trúc sp:TransportBinding của XML chứa thẻ sp:IncludeTimeStamp, yêu cầu một dấu thời gian được bao gồm trong thông báo.

Ở đó bạn có nó: một tệp chính sách đầy đủ, nhờ Gene và Francis. Tiếp theo, hãy xem cách viết một chính sách chặt chẽ bằng cách tham chiếu một tệp đã tồn tại rồi hơn là sao chép nó.

Việc tham chiếu một tài liệu chính sách trong một chính sách

Bắt đầu với chính sách từ Liệt kê 4. Bây giờ, hãy biến nó thành chính sách sau, như trong Liệt kê 5.

Liệt kê 5. Tham chiếu một chính sách trong một chính sách
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
xmlns:wsu=http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity 
                                               -utility-1.0.xsd >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>

      <wsp:Policy wsu:Id="myPolicy">
        <sp:UsernameToken /> 
        <sp:SignedParts />
        <sp:EncryptedParts>
          <sp:Body />
        </sp:EncryptedParts>
      </wsp:Policy>

      <sp:TransportBinding>
        <sp:IncludeTimeStamp />
      </sp:TransportBinding>
    </wsp:All>
    <wsp:PolicyReference URI="#myPolicy" />
  </wsp:ExactlyOne>
</wsp:Policy>

Lưu ý rằng ba xác nhận chính sách được đặt bên trong wsp:Policy và một mã nhận dạng (ID) có liên kết với nó (myPolicy). Câu lệnh wsp:PolicyReference về cơ bản sao chép và dán cấu trúc chính sách đến vị trí đã xác định. Gene nghĩ rằng điều này là tuyệt vời cho việc tạo các biểu thức chính sách rút gọn.

Trong phần tiếp theo, bạn tìm hiểu về các toán tử chính sách và cách bạn có thể thao tác các tài liệu chính sách bằng cách sử dụng các tính chất toán học của các toán tử chính sách.


Sử dụng các toán tử chính sách

Các cấu trúc tạo nên một chính sách, ví dụ như các xác nhận chính sách và các lưạ chọn chính sách, có các tính chất toán học cụ thể. Việc biết các tính chất này cho phép bạn viết các chính sách phức tạp theo cách ngắn gọn nhất. Trong phần này, bạn tìm hiểu các tính chất này và cách chúng áp dụng cho các tài liệu chính sách.

Tổng quan về các cấu trúc

Các cấu trúc áp dụng cho phần còn lại của phần này trong việc biểu diễn chính sách phức tạp theo cách ngắn gọn nhất, là wsp:Policy, wsp:Allwsp:ExactlyOne. Để trợ giúp trong việc viết các chính sách phức tạp, ba cấu trúc này có thể được lồng vào nhau. Các quy tắc sau áp dụng khi chuyển đổi một biểu thức rút gọn (với một vài biểu thức có thể) thành một biểu thức dạng tiêu chuẩn (không bỏ phí dòng nào; toàn bộ biểu thức được viết theo cách dài dòng nhất):

  • Tính tương đương (Equivalence)
  • Tính rỗng (Empty)
  • Tính kết hợp (Associative)
  • Tính giao hoán (Commutative)
  • Tính phân phối (Distributive)

Bạn thấy cách sử dụng mỗi một trong các quy tắc trong phần còn lại của phần này.

Tính tương đương

Quy tắc này, tính tương đương, quy định rằng wsp:Policy tương đương với wsp:All. Bởi vì wsp:All xác định một sự lựa chọn chính sách, wsp:Policy cũng xác định một sự lựa chọn chính sách.

Tính rỗng

Cả một chính sách lẫn một sự lựa chọn chính sách có thể rỗng. Nếu một chính sách rỗng, chẳng hạn như <wsp:ExactlyOne />, thì chính sách này không có sự lựa chọn chính sách. Tương tự, nếu một lựa chọn chính sách rỗng, chẳng hạn như <wsp:All /> or <wsp:Policy />, thì chính sách đó không có sự xác nhận chính sách.

Tính kết hợp

Các toán tử wsp:ExactlyOnewsp:All cũng kết hợp. Điều này có nghĩa rằng, khi sử dụng wsp:ExactlyOne như được xác định trong Liệt kê 6 (ở đây <!-- assertion a --><!-- assertion b --> là sự xác nhận bất kỳ), chính sách này tương đương với chính sách trong Liệt kê 4.

.

Liệt kê 6. wsp:ExactlyOne hiển thị tính kết hợp
<wsp:ExactlyOne>
  <!-- assertion a -->
  <wsp:ExactlyOne> <!-- assertion b --> </wsp:ExactlyOne>
</wsp:ExactlyOne>

Chính sách tương đương của wsp:ExactlyOne được hiển thị trong Liệt kê 7 bằng cách sử dụng tính kết hợp.

Liệt kê 7. Chính sách tương đương
<wsp:ExactlyOne>
  <!-- assertion a --> <!-- assertion b -->
</wsp:ExactlyOne>

Và chính sách, khi sử dụng wsp:All, trong Liệt kê 8 tương đương với chính sách trong Liệt kê 9.

Liệt kê 8. wsp:All hiển thị tính kết hợp
<wsp:All>
  <!-- assertion a -->
  <wsp:All> <!-- assertion b --> </wsp:All>
</wsp:All>

Chính sách tương đương, khi sử dụng tính kết hợp của wsp:All, được thể hiện trong Liệt kê 9.

Liệt kê 9. Chính sách tương đương
<wsp:All>
  <!-- assertion a --> <!-- assertion b -->
</wsp:All>

Tiếp theo bạn xem các hai toán tử cũng có tính giao hoán.

Tính giao hoán

Các toán tử wsp:ExactlyOnewsp:All cũng có tính giao hoán. Điều này có nghĩa là khi hai hoặc nhiều sự xác nhận chính sách được lồng nhau trong cả hai toán tử, thứ tự của chúng không quan trọng. Ví dụ, khi sử dụng wsp:All câu lệnh trong Liệt kê 10 là tương đương với câu lệnh trong Liệt kê 11.

Liệt kê 10. <wsp:All> hiển thị các toán tử giao hoán
<wsp:All>
  <!-- assertion a --> <!-- assertion b -->
</wsp:All>

Chính sách tương đương của wsp:ExactlyOne được hiển thị trong Liệt kê 11 khi sử dụng các toán tử giao hoán.

Liệt kê 11. Câu lệnh tương đương
<wsp:All>
  <!-- assertion b --> <!-- assertion a -->
</wsp: All>

Câu lệnh tương tự cũng áp dụng cho toán tử wsp:ExactlyOne được thể hiện trong Liệt kê 12 và Liệt kê 13.

Liệt kê 12. Toán tử wsp:ExactlyOne hiển thị các toán tử giao hoán
<wsp:ExactlyOne>
  <!-- assertion a --> <!-- assertion b -->
</wsp:ExactlyOne>

Chính sách tương đương, khi sử dụng toán tử giao hoán wsp:ExactlyOne, được hiển thị trong Liệt kê 13.

Liệt kê 13. Câu lệnh tương đương
<wsp:ExactlyOne>
  <!-- assertion b --> <!-- assertion a -->
</wsp:ExactlyOne>

Tiếp theo, bạn xem các toán tử cũng có tính phân phối như thế nào.

Tính phân phối

Cả wsp:ExactlyOne lẫn wsp:All đều có tính phân phối. Sau đây là ví dụ cho thấy điều này trong vùng biểu thức chính sách (xem Liệt kê 14).

Liệt kê 14. wsp:All phân phối trên wsp:ExactlyOne, phần 1
<wsp:All>
  <wsp:ExactlyOne>
    <!-- assertion a --> <!-- assertion b -->
  </wsp:ExactlyOne>
</wsp:All>

Chính sách tương đương, theo phân phối wsp:All trên wsp:ExactlyOne, được hiển thị trong Liệt kê 15.

Liệt kê 15. wsp:All phân phối trên wsp:ExactlyOne, phần 2
<wsp:ExactlyOne>
  <wsp:All>
    <!-- assertion a -->
  </wsp:All>
  <wsp:All>
    <!-- assertion b -->
  </wsp:All>
</wsp:ExactlyOne>

Và đây là một ví dụ phức tạp hơn. Biểu thức này cũng tương tự như nhân (x + a) với (y +z) trong đó bạn nhận được bốn biểu thức: xy + xz + ay + az (xem Liệt kê 16).

Liệt kê 16. wsp:All phân phối trên wsp:ExactlyOne, phần 3
<wsp:All>
  <wsp:ExactlyOne>
    <!-- assertion a --> <!-- assertion b -->
  </wsp:ExactlyOne>
  <wsp:ExactlyOne>
    <!-- assertion c --> <!-- assertion d -->
  </wsp:ExactlyOne>
</wsp:All>

Chính sách tương đương, theo phân phối wsp:All trên wsp:ExactlyOne, được hiển thị trong Liệt kê 17.

Liệt kê 17. wsp:All phân phối trên wsp:ExactlyOne, phần 4
<wsp:ExactlyOne>
  <wsp:All>
    <!-- assertion a --> <!-- assertion c -->
  </wsp:All>
  <wsp:All>
    <!-- assertion a --> <!-- assertion d -->
  </wsp:All>
  <wsp:All>
    <!-- assertion b --> <!-- assertion c -->
  </wsp:All>
  <wsp:All>	
    <!-- assertion b --> <!-- assertion d -->
  </wsp:All>
</wsp:ExactlyOne>

Lưu ý rằng việc phân phối wsp:All trên một wsp:ExactlyOne rỗng dẫn tới không có sự lựa chọn nào (<wsp:ExactlyOne />), bởi vì nó gần giống như phép nhân với số không. Điều này cũng cho cùng một kết quả nếu bất kỳ biểu thức wsp:ExactlyOne nào trong Liệt kê 15 là rỗng: kết quả là một chính sách không có sự lựa chọn nào.

Tính không thay đổi giá trị

Các toán tử cũng không thay đổi giá trị (idempotent), có nghĩa là bất kỳ giá trị có tính chất không thay đổi nhân với cùng giá trị đó vẫn không thay đổi. Các ví dụ trong các Liệt kê 18-21 cho thấy tính chất này.

Liệt kê 18. wsp:All hiển thị tính không thay đổi giá trị
<wsp:All>
  <wsp:All> <!-- assert a --> <!-- assert b --> </wsp:All>
</wsp:All>

Chính sách tương đương, khi sử dụng tính không thay đổi giá trị của wsp:All, được thể hiện trong Liệt kê 19.

Liệt kê 19. Liệt kê tương đương
<wsp:All>
  <!-- assertion a --> <!-- assertion b -->
</wsp:All>

Liệt kê Liệt kê 20 và 21 cho thấy wsp:ExactlyOne là không thay đổi giá trị.

Liệt kê 20. wsp:ExactlyOne hiển thị tính không thay đổi giá trị
<wsp:ExactlyOne>
  <wsp:ExactlyOne>
    <!-- assert a --> <!-- assert b -->
  </wsp:ExactlyOne>
</wsp:ExactlyOne>

Chính sách tương đương, khi sử dụng tính không thay đổi giá trị của wsp:ExactlyOne, được hiển thị trong Liệt kê 21.

Liệt kê 21. Liệt kê tương đương
<wsp:ExactlyOne>
  <!-- assert a --> <!-- assert b --> 
</wsp:ExactlyOne>

Về cơ bản, một wsp:All đã lồng trong một wsp:All, hoặc một wsp:ExactlyOne đã lồng trong một wsp:ExactlyOne, là thừa, có nghĩa là bạn có thể loại bỏ một trong các toán tử wsp:All hay wsp:ExactlyOne khỏi biểu thức đó. Nó cũng giống như nhân bất cứ thứ gì với 1: giá trị đó vẫn không thay đổi. Các tính chất toán học của các toán tử này là quan trọng để hiểu khi bạn học về thao tác và tiêu chuẩn hóa các tài liệu chính sách khi sử dụng Apache Neethi trong phần tiếp theo.


Sử dụng Apache Neethi để làm việc với các tài liệu chính sách

Dự án Apache Neethi là thứ mà Axis2 sử dụng như là sự biểu thị thời gian chạy các tài liệu chính sách của mình. Trong phần này bạn cài đặt Apache Neethi; tải lên một số tài liệu chính sách; tiêu chuẩn hóa, kết hợp và giao cắt chúng; và sau đó xem các tài liệu chính sách tiêu chuẩn hóa kết quả. Bây giờ là thời điểm tốt để tải về các mã mẫu từ phần Tải về. Giải nén nó và xem tệp readme.

Đọc các tài liệu chính sách

Trước khi bạn có thể làm bất cứ điều gì có ích bằng cách sử dụng Các ứng dụng Web-Chính sách, bạn cần để có khả năng đọc và viết chính sách. Francis cho rằng điều này rất thú vị. Cô háo hức mong chờ giao cắt hai tài liệu chính sách. Xem Liệt kê 22 với người đọc chính sách.

Liệt kê 22. Đọc một tài liệu chính sách
    public static Policy readPolicy(String file){
        Policy policy = null;
        try{
            PolicyReader reader =
                PolicyFactory.getPolicyReader
                    (PolicyFactory.DOM_POLICY_READER);
            FileInputStream fis =
                new FileInputStream(file);
            policy = reader.readPolicy(fis);
        } catch(Exception e) {
            System.out.println("Exception occurred: " + e);
            e.printStackTrace();
        }
        return policy;
    }

Đặt phương thức readPolicy() trong một tệp có tên là PolicyUtility.java. Bạn sử dụng nó sau này để đọc các tệp chính sách trong cuộc thử nghiệm Apache Neethi của bạn. Phương thức này chỉ cần đọc qua một tệp chính sách được xác định, đặt nó đó trong một chính sách có tên đối tượng và trả về nó. Tiếp theo là người viết chính sách.

Viết tài liệu chính sách

Viết một tài liệu chính sách cho phép bạn xem các kết quả của các thao tác chính sách của bạn. Xem Liệt kê 23 với các mã của người viết chính sách.

Liệt kê 23. Viết một tài liệu chính sách
    public static void writePolicy(Policy w, String file){
        try{
            FileOutputStream fos =
                new FileOutputStream(file);

            PolicyWriter writer =
                PolicyFactory.getPolicyWriter
                    (PolicyFactory.StAX_POLICY_WRITER);

            writer.writePolicy(w, fos);
        } catch(Exception e) {
            System.out.println("Exception occurred: " + e);
            e.printStackTrace();
        }
    }

Đặt việc này trong cùng tệp lớp như trước: PolicyUtility.java. Phương thức này viết các nội dung của một tài liệu chính sách cụ thể vào một tên tệp cụ thể. Tiếp theo, bạn sử dụng hai phương thức tiện ích này trong thử nghiệm với Apache Neethi.

Tiêu chuẩn hóa một tài liệu chính sách

Khi một tài liệu được tiêu chuẩn hóa trong Apache Neethi, nó được sắp xếp ở dạng tiêu chuẩn (không rút gọn). Trong đoạn mã mẫu đi kèm với hướng dẫn này (xem Tải về), bạn sẽ thấy ba tệp: normalize1.xml, normalize2.xml và normalize_output_final.xml. normalize1.xml, trong Liệt kê 24, có chứa một tài liệu chính sách tham chiếu một chính sách bên ngoài. normalize2.xml, được hiển thị trong Liệt kê 25, là tài liệu mà normalize1.xml đang tham chiếu đến.

Liệt kê 24. normalize1.xml
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
utility-1.0.xsd" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>

      <wsp:Policy wsu:Id="#myPolicy">
        <sp:UsernameToken /> 
        <sp:SignedParts />
        <sp:EncryptedParts>
          <sp:Body />
        </sp:EncryptedParts>
      </wsp:Policy>

      <sp:TransportBinding>
        <sp:IncludeTimeStamp />
      </sp:TransportBinding>
    </wsp:All>
    <wsp:PolicyReference URI="#myPolicy" />
  </wsp:ExactlyOne>
</wsp:Policy>

Chính sách được tham chiếu ở trên, myPolicy, được hiển thị trong Liệt kê 25.

Liệt kê 25. normalize2.xml
<wsp:Policy wsu:Id="myPolicy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
utility-1.0.xsd" >
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:UsernameToken /> 
      <sp:SignedParts />
      <sp:EncryptedParts>
        <sp:Body />
      </sp:EncryptedParts>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Mã để tiêu chuẩn hóa các chính sách trong Liệt kê 24 được hiển thị trong Liệt kê 26.

Liệt kê 26. Tiêu chuẩn hóa một tài liệu chính sách
import org.apache.ws.policy.Policy;
import org.apache.ws.policy.util.PolicyRegistry;
import org.apache.ws.policy.util.PolicyReader;
import org.apache.ws.policy.util.PolicyWriter;
import org.apache.ws.policy.util.PolicyFactory;
import java.io.FileInputStream;
import java.io.FileOutputStream;

class PolicyUtility{

    public static void main(String argsv[]){
        Policy normalize1 = readPolicy("normalize1.xml");
        Policy normalize2 = readPolicy("normalize2.xml");
        PolicyRegistry pr = new PolicyRegistry();
        pr.register("#myPolicy", normalize2);
        normalize1 = (Policy)normalize1.normalize(pr);
        writePolicy(normalize1, "normalize_output.xml");

Kết quả của việc tiêu chuẩn hóa ở trong tệp normalize_output_final.xml (xem Liệt kê 27).

Liệt kê 27. Tệp normalize_output_final.xml kết quả
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext">
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken>
      </sp:UsernameToken>
      <sp:SignedParts>
      </sp:SignedParts>
      <sp:EncryptedParts>
        <sp:Body>
        </sp:Body>
      </sp:EncryptedParts>
      <sp:TransportBinding>
        <sp:IncludeTimeStamp>
        </sp:IncludeTimeStamp>
      </sp:TransportBinding>
    </wsp:All>
    <wsp:All>
      <sp:UsernameToken xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext">
      </sp:UsernameToken>
      <sp:SignedParts>
      </sp:SignedParts>
      <sp:EncryptedParts>
        <sp:Body>
        </sp:Body>
      </sp:EncryptedParts>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Nếu bạn chạy chương trình bằng cách làm theo các hướng dẫn trong tệp readme, kết quả được viết vào tệp normalize_output.xml. Lưu ý PolicyReference trong tệp normalize1.xml được thay thế bằng sự lựa chọn chính sách trong tệp normalize2.xml như thế nào. Hãy tự do sửa đổi hai tệp để xem bạn nhận được kết quả gì khi đang chạy các sự tiêu chuẩn hóa khác. Tiếp theo, kết hợp hai tài liệu chính sách.

Kết hợp hai tài liệu chính sách

Việc kết hợp hai tài liệu chính sách để hợp nhất tất cả các lựa chọn chính sách từ hai tệp riêng biệt. Ví dụ, nếu bạn có hai tệp, mỗi tệp có hai lựa chọn chính sách, bạn kết thúc bằng một tệp có bốn lựa chọn chính sách. Nếu một tệp có hai lựa chọn chính sách và tệp khác có một lựa chọn chính sách, thì bạn kết thúc với hai lựa chọn thay thế chính sách. Hãy xem hai tệp mà bạn có thể kết hợp trong các Liệt kê 28 và 29.

Liệt kê 28. merge1.xml
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken /> 
      <sp:EncryptedParts>
        <sp:Body />
      </sp:EncryptedParts>
      <sp:TransportBinding>
        <sp:IncludeTimeStamp />
      </sp:TransportBinding>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Bạn có thể kết hợp chính sách ở trên, merge1.xml, với chính sách được thể hiện trong Liệt kê 29, merge2.xml.

Liệt kê 29. merge2.xml
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:SignedParts />
      <sp:EncryptedParts />
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Kinh nghiệm là cách tốt nhất để học khái niệm này. Vì vậy, Liệt kê 30 tiếp tục lớp PolicyUtility.java mà bạn đã bắt đầu bằng cách thực hiện các mã để kết hợp hai tài liệu chính sách trong Liệt kê 28 và 29.

Liệt kê 30. Kết hợp hai tài liệu chính sách
...
        normalize1 = (Policy)normalize1.normalize(pr);
        writePolicy(normalize1, "normalize_output.xml");

        Policy merge1 = readPolicy("merge1.xml"); 
        Policy merge2 = readPolicy("merge2.xml"); 
        merge1 = (Policy)merge1.merge(merge2); 
        writePolicy(merge1, "merge_output.xml");
...

Ở đây, hai tài liệu chính sách được đọc và được kết hợp và sau đó đầu ra của việc kết hợp được viết vào một tệp (xem Liệt kê 31).

Liệt kê 31. Tệp merge_output_final.xml kết quả
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext">
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken>
      </sp:UsernameToken>
      <sp:EncryptedParts>
        <sp:Body>
        </sp:Body>
      </sp:EncryptedParts>
      <sp:TransportBinding>
        <sp:IncludeTimeStamp>
        </sp:IncludeTimeStamp>
      </sp:TransportBinding>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:SignedParts>
      </sp:SignedParts>
      <sp:EncryptedParts>
      </sp:EncryptedParts>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Quay lại Liệt kê 28 và 29. Mỗi Liệt kê chứa một lựa chọn chính sách, do đó tài liệu kết quả có chứa một lựa chọn chính sách với tất cả các xác nhận chính sách trong cả hai lựa chọn chính sách được sao chép thành một lựa chọn chính sách mới. Xem lại các các kết quả trong tệp merge_output_final.xml, được hiển thị trong Liệt kê 31. Lưu ý rằng tất cả các xác nhận chính sách từ một sự lựa chọn chính sách trong merge1.xml và tất cả các xác nhận chính sách từ một sự lựa chọn chính sách merge2.xml được kết hợp trong merge_output_final.xml để tạo thành một lựa chọn chính sách kết hợp duy nhất.

Các chính sách và các chữ ký

Vì các chính sách giữ thông tin quan trọng về cách các dịch vụ Web tương tác với nhau, nên luôn luôn đảm bảo rằng chính sách mà bạn đã nhận quả thực từ các thực thể mà bạn yêu cầu nó từ đó. Để ký các chính sách của bạn nhằm ngăn chặn giả mạo là cách thực hành tốt.

Giao cắt hai tài liệu chính sách

Giao cắt là một khái niệm còn quan trọng hơn. Về cơ bản, nếu hai dịch vụ Web sắp tương tác, chúng muốn làm như vậy bằng cách sử dụng lựa chọn chính sách được cả hai hỗ trợ. Các dịch vụ Web cần giao cắt từng tài liệu chính sách của nhau. Kết quả là một sự kết hợp của các lựa chọn chính sách trùng khớp. Francis ham thích ý tưởng này với mục đích là, khi gọi dịch vụ Web khác bằng mã khách của mình, Francis có thể giao cắt các chính sách có sẵn của tờ Daily Moon với các chính sách của dịch vụ Web mà Francis mong muốn tương tác với chúng (xem Liệt kê 32).

Liệt kê 32. intersect1.xml
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken /> 
      <sp:SignedParts />
      <sp:EncryptedParts>
        <sp:Body />
      </sp:EncryptedParts>
      <sp:TransportBinding>
        <sp:IncludeTimeStamp />
      </sp:TransportBinding>
    </wsp:All>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken /> 
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Bạn có thể giao cắt chính sách ở trên, intersect1.xml, với chính sách được hiển thị trong Liệt kê 33, intersect2.xml.

Liệt kê 33. intersect2.xml
<wsp:Policy
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" >

  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:SignedParts />
      <sp:EncryptedParts />
    </wsp:All>
    <wsp:All>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken /> 
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Xem mã để để tạo giao cắt của intersect1.xml và intersect2.xml xảy ra trong Liệt kê 34.

Liệt kê 34. Giao cắt hai tài liệu chính sách
...
        merge1 = (Policy)merge1.merge(merge2).normalize();
        writePolicy(merge1, "merge_output.xml");

        Policy intersect1 = readPolicy("intersect1.xml"); 
        Policy intersect2 = readPolicy("intersect2.xml"); 
        intersect1 = (Policy)intersect1.merge(intersect2); 
        writePolicy(intersect1, "intersect_output.xml");
...

Ở đây, hai tài liệu chính sách được đọc và được giao cắt và sau đó đầu ra của việc giao cắt được viết vào một tệp. Xem hai tệp trong Liệt kê 32 và 33. Mỗi tệp có hai lựa chọn chính sách, nhưng chỉ có một lựa chọn chính sách trong mỗi tệp trùng khớp. Các lựa chọn chính sách không khớp được loại bỏ và các lựa chọn chính sách trùng khớp được kết hợp với nhau (với một lựa chọn chính sách trùng khớp, trong ví dụ này). Bây giờ, hãy xem kết quả thực tế trong tệp merge_output_final.xml, thể hiện trong Liệt kê 35.

Liệt kê 35. Tệp merge_output_final.xml kết quả
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
  <wsp:ExactlyOne>
    <wsp:All>
      <sp:SecurityToken xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext">
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken>
      </sp:UsernameToken>
      <sp:SecurityToken>
        <sp:TokenType>sp:X509v3</sp:TokenType>
      </sp:SecurityToken>
      <sp:UsernameToken>
      </sp:UsernameToken>
    </wsp:All>
  </wsp:ExactlyOne>
</wsp:Policy>

Lưu ý cách các lựa chọn chính sách trùng khớp trong mỗi tệp (các lựa chọn chính sách thứ hai trong intersect1.xml và intersect2.xml) về cơ bản được kết hợp với nhau trong một lựa chọn chính sách được thể hiện trong merge_output_final.xml. Điều đó hoàn thành công việc của bạn với Apache Neethi.

Tiếp theo, nghiên cứu làm việc với các tài liệu chính sách trong WSDL.


Làm việc với các tài liệu chính sách trong WSDL

Đặc tả Các dịch vụ Web-Đính kèm chính sách (WS-PolicyAttachment) trình bày chi tiết cách các chính sách được gắn kết với các ràng buộc và về cơ bản là chất kết dính để thực thi một dịch vụ Web tuân thủ một chính sách. Phần này trình bày các mục tiêu của đặc tả Các dịch vụ Web-Đính kèm chính sách và cách nó cho phép bạn đính kèm các chính sách cho dịch vụ Web của bạn.

Các dịch vụ Web-Đính kèm chính sách

Mục tiêu của đặc tả Các dịch vụ Web-Đính kèm chính sách là để định nghĩa một phương tiện cho các nhà phát triển tham chiếu các chính sách từ các định nghĩa WSDL. Các chi tiết trong đặc tả này cũng tồn tại để liên kết các chính sách với các thực thể UDDI, không được trình bày trong hướng dẫn này. Xem phần Tài nguyên với một liên kết đến đặc tả Các dịch vụ Web-Đính kèm chính sách đầy đủ. Phần còn lại của phần này cho thấy cách làm theo đặc tả Các dịch vụ Web-Đính kèm chính sách để tham chiếu tài liệu chính sách của tờ Daily Moon với WSDL. Gene rất phấn khích về nhiệm vụ này để anh ta có thể chuẩn bị chính sách và chạy trên các dịch vụ web của tờ Daily Moon càng nhanh nhất càng tốt.

Các dịch vụ Web-Chính sách cần thiết

Có một cấu trúc để thực thi WSDL của bạn để sử dụng và tham chiếu các chính sách. Liệt kê 36 cho thấy một ví dụ.

Liệt kê 36. Chính sách cần thiết trong WSDL của bạn
<wsdl:definitions...>

  <wsp:UsingPolicy wsdl:Required="true" />
...
</wsdl:definitions >

Tiếp theo, bạn thêm các chính sách nội tuyến với các WSDL.

Nơi đặt các chính sách

Đặt các chính sách ngay sau khi dòng yêu cầu wsp:UsingPolicy. Đối với tờ Daily Moon, bạn có thể đặt nó như Gene đã làm, thể hiện trong Liệt kê 37.

Liệt kê 37. Xác định các chính sách trong WSDL
<wsdl:definitions 
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy" 
xmlns:sp="http://schemas.xmlsoap.org/ws/2002/12/secext" 
xmlns:wsu=
   http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- utility-1.0.xsd
...
>

  <wsp:UsingPolicy wsdl:Required="true" />
  <wsp:Policy wsu:Id="myPolicy"> 
      <wsp:ExactlyOne> 
          <wsp:All> 
             <sp:SecurityToken> 
                 <sp:TokenType>sp:X509v3</sp:TokenType> 
             </sp:SecurityToken> 
             <sp:UsernameToken /> 
             <sp:SignedParts /> 
             <sp:EncryptedParts> 
                 <sp:Body /> 
             </sp:EncryptedParts> 
             <sp:TransportBinding> 
                 <sp:IncludeTimeStamp /> 
             </sp:TransportBinding> 
          </wsp:All> 
       </wsp:ExactlyOne> 
  </wsp:Policy>
...
</wsdl:definitions >

Ở đó bạn tiếp tục! Chính sách này ở bên trong WSDL. Bây giờ bạn chỉ cần kết hợp nó với một ràng buộc, mà bạn có thể làm tiếp theo.

Gắn các chính sách cho các ràng buộc

Bây giờ một chính sách đã được viết, nó là vô dụng trừ khi bạn kết hợp nó với một ràng buộc cổng. Nếu một ràng buộc đã được xác định, Liệt kê 38 cho bạn thấy cách để đính kèm chính sách của tờ Daily Moon với ràng buộc đó.

Liệt kê 38. Kết hợp một chính sách với một ràng buộc: thi hành chính sách
<wsdl:definitions 
...
>

  <wsp:UsingPolicy wsdl:Required="true" />
  <wsp:Policy wsu:Id="myPolicy">
...
  </wsp:Policy>
  <wsdl:binding name="myBinding"
                type="tns:myPortType">
    <soap:binding 
      transport="http://schemas.xmlsoap.org/soap/http"
      style="document" />
    <wsp:PolicyReference URI="#myPolicy" wsdl:required="true" />
    <wsdl:operation name="myOperation" >
...
    </wsdl:operation>
  </wsdl:binding>

</wsdl:definitions >

Lưu ý cách Gene đã viết WSDL. Trong ràng buộc cổng, hãy xem thẻ wsp:PolicyReference tham chiếu tới chính sách, myPolicy. Thẻ này xác định rằng hoạt động dịch vụ Web (myOperation) bị ràng buộc (khi sử dụng myBinding) với portType cụ thể (myPortType) phải bắt buộc rằng tất cả các thông báo đến tuân thủ chính sách đó, như được định nghĩa trong chính sách với wsu:Id="#myPolicy". Đó là tất cả có với nó! Nếu Axis2 hỗ trợ đầy đủ các chính sách, thì một ứng dụng khách cố tương tác với dịch vụ Web của tờ Daily Moon sẽ không thể thực hiện các giao dịch thành công với nó trừ khi nó tuân thủ tất cả các xác nhận của một trong những lựa chọn cho chính sách đó.


Tóm tắt

Để cho các dịch vụ Web thực sự có ích trong môi trường doanh nghiệp, chúng cần có cấu hình và các chính sách an ninh thích hợp. Các dịch vụ Web-Chính sách giải quyết vấn đề này bằng cách cho phép các định nghĩa chính sách bị ràng buộc với các dịch vụ Web. Những định nghĩa chính sách này định nghĩa cách giao dịch xuất hiện và chúng có thể đòi hỏi vô số những thứ để thực thi một môi trường an toàn hơn cho giao dịch.

Bằng cách thực thi một mức mã hóa và chữ ký số cụ thể, bạn có thể bảo vệ dữ liệu trong quá trình vận chuyển của nó và giới hạn truy cập cho các cá nhân hay tổ chức có thẩm quyền và sau đó kiểm tra xem thông tin đã không bị thay đổi trong lúc chuyển tiếp. Có chính sách của bạn yêu cầu một dấu thời gian (và ký nó) cho phép bạn ngăn các thông báo khỏi bị bắt giữ và bị phát lại.

Trong hướng dẫn này, các nhân viên của tờ Daily Moon thực hiện an ninh cho các dịch vụ Web mà họ đã tạo ra và đã bảo vệ trong các phần trước của loạt bài này. Tiếp theo, trong Phần 6, họ sẽ áp dụng WS-I hoặc Các dịch vụ Web-Tính tương thích, với các dịch vụ Web.


Tải về

Mô tảTênKích thước
Part 5 source codewspolicycode.zip5KB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

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.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

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

Chọn tên hiển thị của bạn



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.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

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.

 


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


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=SOA và dịch vụ Web
ArticleID=579900
ArticleTitle=Hiểu biết về Đặc tả các dịch vụ Web, Phần 5: Các dịch vụ Web-Chính sách
publish-date=11102010