Ví dụ về bảo mật dịch vụ web (WS) với SOAP
⚡ Tóm tắt thông minh
Bảo mật Dịch vụ Web (WS) là một tiêu chuẩn bảo vệ dữ liệu được trao đổi trong quá trình gọi dịch vụ web SOAP. Tài liệu này giải thích các mối đe dọa bảo mật và biện pháp đối phó, các tiêu chuẩn WS-Security, xây dựng một dịch vụ web an toàn với thông tin xác thực và các thực tiễn tốt nhất về bảo mật dịch vụ web.
Bảo mật WS là gì?
WS Security là một tiêu chuẩn giải quyết vấn đề bảo mật khi dữ liệu được trao đổi trong quá trình dịch vụ web. Đây là một tính năng quan trọng trong SOAP, khiến nó trở nên rất phổ biến để tạo ra các dịch vụ web.
Bảo mật là một tính năng quan trọng trong bất kỳ ứng dụng web nào. Vì hầu hết các ứng dụng web đều được kết nối với internet, nên luôn tiềm ẩn nguy cơ bị tấn công bảo mật. Do đó, khi phát triển...ping Đối với các ứng dụng dựa trên web, luôn nên đảm bảo rằng ứng dụng được thiết kế và phát triển với tiêu chí bảo mật được đặt lên hàng đầu.
Các mối đe dọa an ninh và biện pháp đối phó
Để hiểu rõ hơn về các mối đe dọa bảo mật có thể gây hại cho ứng dụng web, chúng ta hãy xem xét một kịch bản đơn giản của một ứng dụng web và xem cách thức hoạt động của nó về mặt bảo mật.
Một trong những biện pháp bảo mật dành cho HTTP là giao thức HTTPS. HTTPS là phương thức giao tiếp an toàn giữa máy khách và máy chủ trên web. HTTPS sử dụng Lớp ổ cắm bảo mật, hay SSL, để đảm bảo an toàn cho việc giao tiếp. Cả máy khách và máy chủ đều sẽ có chứng chỉ số để xác thực tính xác thực của mình khi có bất kỳ sự giao tiếp nào diễn ra giữa máy khách và máy chủ.
Trong quá trình giao tiếp HTTPS tiêu chuẩn giữa máy khách và máy chủ, các bước sau đây sẽ diễn ra:
- Máy khách gửi yêu cầu đến máy chủ thông qua chứng chỉ máy khách. Khi máy chủ nhìn thấy chứng chỉ ứng dụng khách, nó sẽ ghi chú vào hệ thống bộ đệm của mình để biết phản hồi chỉ nên quay lại ứng dụng khách này.
- Sau đó, máy chủ sẽ tự xác thực với máy khách bằng cách gửi chứng chỉ của nó. Điều này đảm bảo rằng máy khách đang liên lạc với đúng máy chủ.
- Mọi thông tin liên lạc giữa máy khách và máy chủ sau đó đều được mã hóa. Điều này đảm bảo rằng nếu bất kỳ người dùng nào khác cố gắng phá vỡ bảo mật và lấy dữ liệu cần thiết, họ sẽ không thể đọc được vì dữ liệu đã được mã hóa.
Tuy nhiên, loại bảo mật nêu trên sẽ không hiệu quả trong mọi trường hợp. Có thể sẽ có lúc máy khách giao tiếp với nhiều máy chủ cùng một lúc. Ví dụ dưới đây cho thấy một máy khách đang giao tiếp với cả cơ sở dữ liệu và máy chủ web cùng một lúc. Trong những trường hợp như vậy, không phải tất cả thông tin đều có thể truyền qua giao thức HTTPS.
Đây là lúc SOAP phát huy tác dụng để khắc phục những trở ngại đó bằng cách sử dụng đặc tả WS Security. Với đặc tả này, tất cả dữ liệu liên quan đến bảo mật được định nghĩa trong phần tử tiêu đề SOAP. Phần tử tiêu đề có thể chứa các thông tin được đề cập dưới đây:
- Nếu thông báo trong phần nội dung SOAP đã được ký bằng bất kỳ khóa bảo mật nào thì khóa đó có thể được xác định trong phần tử tiêu đề.
- Nếu bất kỳ phần tử nào trong phần thân SOAP được mã hóa, phần tiêu đề sẽ chứa các khóa mã hóa cần thiết để thông điệp có thể được giải mã khi đến đích.
Trong môi trường nhiều máy chủ, kỹ thuật xác thực SOAP nêu trên hỗ trợ theo những cách sau:
- Vì phần thân SOAP được mã hóa nên nó chỉ có thể được giải mã bởi máy chủ web lưu trữ dịch vụ web. Điều này là do giao thức SOAP được thiết kế như thế nào.
- Giả sử thông điệp được gửi đến máy chủ cơ sở dữ liệu trong một yêu cầu HTTP; nó không thể được giải mã vì cơ sở dữ liệu không có cơ chế phù hợp để thực hiện việc đó.
- Chỉ khi yêu cầu thực sự đến được máy chủ web dưới dạng giao thức SOAP thì máy chủ mới có thể giải mã thông điệp và gửi phản hồi thích hợp trở lại cho máy khách.
Trong các chủ đề tiếp theo, chúng ta sẽ xem xét cách tiêu chuẩn WS Security có thể được sử dụng để... XÀ BÔNG TẮM.
Tiêu chuẩn bảo mật dịch vụ web
Như đã thảo luận ở phần trước, tiêu chuẩn WS-Security xoay quanh việc đưa định nghĩa bảo mật vào phần tiêu đề SOAP. Thông tin xác thực trong tiêu đề SOAP được quản lý theo 2 cách.
Đầu tiên, nó định nghĩa một phần tử đặc biệt gọi là UsernameToken. Phần tử này được sử dụng để truyền tên người dùng và mật khẩu đến dịch vụ web. Cách khác là sử dụng Binary Token thông qua BinarySecurityToken. Cách này được sử dụng trong các trường hợp sử dụng các kỹ thuật mã hóa như Kerberos hoặc X.509.
Sơ đồ bên dưới minh họa quy trình hoạt động của mô hình bảo mật trong WS Security.
Dưới đây là các bước diễn ra trong quy trình làm việc nêu trên:
- Yêu cầu có thể được gửi từ máy khách dịch vụ web đến Dịch vụ Mã thông báo bảo mật. Dịch vụ này có thể là một dịch vụ web trung gian được xây dựng đặc biệt để cung cấp tên người dùng/mật khẩu hoặc chứng chỉ cho dịch vụ web SOAP thực tế.
- Mã thông báo bảo mật sau đó được chuyển đến máy khách dịch vụ Web.
- Sau đó, máy khách dịch vụ web sẽ gọi dịch vụ web, nhưng lần này đảm bảo rằng mã thông báo bảo mật được nhúng trong thông điệp SOAP.
- Sau đó, dịch vụ Web sẽ hiểu thông báo SOAP với mã thông báo xác thực và sau đó có thể liên hệ với dịch vụ Mã thông báo bảo mật để xem mã thông báo bảo mật có xác thực hay không.
Đoạn mã bên dưới hiển thị định dạng của phần xác thực, một phần của tài liệu WSDL. Dựa trên đoạn mã này, thông điệp SOAP sẽ chứa thêm 2 phần tử, một là Tên người dùng và phần còn lại là Mật khẩu.
<xs:element name="UsernameToken"> <xs:complexType> <xs:sequence> <xs:element ref="Username"/> <xs:element ref="Password" minOccurs="0"/> </xs:sequence> <xs:attribute name="Id" type="xs:ID"/> </xs:complexType> </xs:element>
Khi thông điệp SOAP thực sự được truyền giữa máy khách và máy chủ, phần thông điệp chứa thông tin đăng nhập của người dùng có thể trông giống như hình trên. Tên phần tử wsse là một tên phần tử đặc biệt được định nghĩa cho SOAP và có nghĩa là nó chứa thông tin liên quan đến bảo mật.
Cách xây dựng các dịch vụ web an toàn
Bây giờ chúng ta hãy xem xét một ví dụ về bảo mật dịch vụ web SOAP. Chúng ta sẽ xây dựng một dịch vụ web bảo mật dựa trên ví dụ đã được trình bày trước đó trong chương SOAP và sẽ thêm một lớp bảo mật vào đó.
Trong ví dụ này, chúng ta sẽ tạo một dịch vụ web đơn giản, được sử dụng để trả về một chuỗi cho ứng dụng gọi dịch vụ web đó. Nhưng lần này, khi dịch vụ web được gọi, thông tin xác thực cần được cung cấp cho dịch vụ gọi. Hãy làm theo các bước dưới đây để tạo dịch vụ web SOAP và thêm định nghĩa bảo mật vào đó.
Bước 1) Bước đầu tiên là tạo một khoảng trống Asp.Net Ứng dụng web. Từ Visual Studio 2013, nhấp vào tùy chọn menu File->New project.
Khi bạn nhấp vào tùy chọn New Project, Visual Studio sẽ cung cấp cho bạn một hộp thoại khác để chọn loại dự án và cung cấp các chi tiết cần thiết của dự án. Điều này được giải thích trong bước tiếp theo.
Bước 2) Trong bước này,
- Đảm bảo rằng trước tiên bạn chọn C# Mẫu web dành cho ứng dụng web ASP.NET. Dự án phải thuộc loại này để tạo dự án dịch vụ web. Bằng cách chọn tùy chọn này, Visual Studio sẽ thực hiện các bước cần thiết để thêm các tệp cần thiết cho bất kỳ ứng dụng web nào.
- Đặt tên cho dự án của bạn, trong trường hợp của chúng tôi là “dịch vụ web.asmxSau đó, hãy nhớ chỉ định vị trí lưu trữ các tệp dự án.
Sau khi hoàn tất, bạn sẽ thấy tệp dự án được tạo trong trình khám phá giải pháp của Visual Studio 2013.
Bước 3) Ở bước này, chúng ta sẽ thêm một tệp dịch vụ web vào dự án của mình.
- Đầu tiên, nhấp chuột phải vào tệp dự án như hình bên dưới.
- Sau khi nhấp chuột phải vào tệp dự án, bạn sẽ có cơ hội chọn tùy chọn “Thêm -> Dịch vụ Web (ASMX)” để thêm tệp dịch vụ web. Chỉ cần cung cấp tên là “Dịch vụ Hướng dẫn” cho tên tệp dịch vụ web.
Bước trên sẽ hiển thị một hộp thoại, trong đó bạn có thể nhập tên của tệp dịch vụ web. Vì vậy, trong hộp thoại bên dưới, hãy nhập tên TutorialService làm tên tệp.
Bước 4) Thêm mã sau vào tệp asmx Tutorial Service của bạn. Đoạn mã dưới đây được sử dụng để thêm một lớp tùy chỉnh sẽ được sử dụng để thay đổi SOAP Header khi tin nhắn SOAP được tạo. Vì bây giờ chúng ta muốn thêm thông tin xác thực bảo mật vào SOAP header, nên bước này là bắt buộc.
return "This is a Guru99 Web Service"; } public class AuthHeader : SoapHeader { public string UserName; public string Password; } }
Code Giải thích:
- Bây giờ chúng tôi đang tạo một lớp riêng gọi là Tiêu đề xác thực thuộc loại nào Lớp SoapHeaderMỗi khi muốn thay đổi nội dung được truyền trong tiêu đề SOAP, bạn cần tạo một lớp sử dụng lớp SoapHeader tích hợp sẵn của .Net. Bằng cách tùy chỉnh tiêu đề SOAP, giờ đây chúng ta có thể truyền "Tên người dùng" và "Mật khẩu" khi gọi dịch vụ web.
- Sau đó, chúng tôi xác định các biến 'Tên người dùng' và 'Mật khẩu' có kiểu chuỗi. Chúng sẽ được sử dụng để giữ các giá trị của tên người dùng và mật khẩu được chuyển đến dịch vụ web.
Bước 5) Bước tiếp theo, đoạn mã sau cần được thêm vào cùng một Tệp TutorialService.asmxĐoạn mã này thực chất định nghĩa chức năng của dịch vụ web của chúng ta. Chức năng này trả về một chuỗi "This is a" Guru99 Dịch vụ web” cho máy khách. Nhưng lần này, chuỗi chỉ được trả về nếu ứng dụng khách chuyển thông tin xác thực cho dịch vụ web.
public class TutorialService : System.Web.Services.WebService { public AuthHeader Credentials; [SoapHeader("Credentials")] [WebMethod] public string Guru99WebService() { if (Credentials.UserName.ToLower() != "Guru99" || Credentials.Password.ToLower() != "Guru99Password") { throw new SoapException("Unauthorized", SoapException.ClientFaultCode); } else return "This is a Guru99 Web service"; }
Code Giải thích:
- Ở đây, chúng ta đang tạo một đối tượng của lớp AuthHeader đã được tạo ở bước trước. Đối tượng này sẽ được chuyển đến chúng tôi Guru99Dịch vụ web trong đó tên người dùng và mật khẩu có thể được kiểm tra chặt chẽ.
- Thuộc tính [SoapHeader] hiện được sử dụng để chỉ định rằng khi dịch vụ Web được gọi, nó cần phải có tên người dùng và mật khẩu được chuyển.
- Trong đoạn mã này, chúng ta thực chất đang kiểm tra tên người dùng và mật khẩu được truyền vào khi gọi dịch vụ web. Nếu Tên người dùng bằng “Guru99” và mật khẩu bằng “Guru99Password”, sau đó là thông báo “Đây là một GuruMã dịch vụ web "99" được truyền đến máy khách. Ngược lại, một lỗi sẽ được gửi đến máy khách nếu tên người dùng và mật khẩu được truyền vào không chính xác.
Nếu mã được thực thi thành công, kết quả sau sẽ hiển thị khi bạn chạy mã trên trình duyệt.
Đầu ra:
Kết quả hiển thị ở trên xuất hiện khi chương trình được chạy, điều này có nghĩa là dịch vụ web hiện đã khả dụng. Hãy nhấp vào Dịch vụ. Descriptliên kết ion.
Từ mô tả dịch vụ, bây giờ bạn có thể thấy tên người dùng và mật khẩu là các thành phần của wsdl tài liệu. Các tham số này cần được gửi khi dịch vụ web được gọi.
Thực tiễn tốt nhất về bảo mật dịch vụ web
Sau đây là những lưu ý về bảo mật cần ghi nhớ khi làm việc với các dịch vụ Web:
- Kiểm toán và quản lý nhật ký – Sử dụng tính năng ghi nhật ký ứng dụng để ghi lại tất cả các yêu cầu đến các dịch vụ web. Điều này cung cấp báo cáo chi tiết về người đã gọi dịch vụ web và có thể giúp phân tích tác động nếu xảy ra bất kỳ vi phạm bảo mật nào.
- Luồng cuộc gọi đến dịch vụ web – Cố gắng ghi lại luồng các cuộc gọi trong các dịch vụ web. Theo mặc định, một ứng dụng có thể gọi nhiều yêu cầu dịch vụ web với các mã thông báo xác thực được truyền giữa các dịch vụ web này. Tất cả các cuộc gọi giữa các dịch vụ web cần được giám sát và ghi nhật ký.
- Thông tin nhạy cảm – Không ghi các thông tin nhạy cảm vào nhật ký, chẳng hạn như mật khẩu, số thẻ tín dụng hoặc bất kỳ thông tin bí mật nào khác. Nếu có sự kiện nào chứa bất kỳ thông tin nào trong số này, cần phải loại bỏ nó trước khi ghi nhật ký.
- Track Business Operations – Traccác hoạt động kinh doanh quan trọng. Ví dụ, hãy tích hợp ứng dụng của bạn để ghi lại quyền truy cập vào các phương thức và logic nghiệp vụ đặc biệt nhạy cảm. Lấy ví dụ về một cửa hàng trực tuyến.ping Ứng dụng. Một ứng dụng điển hình bao gồm nhiều bước, chẳng hạn như chọn các mặt hàng cần mua, thêm các mặt hàng vào giỏ hàng và sau đó là thanh toán cuối cùng. Toàn bộ quy trình kinh doanh này cần phải được thực hiện một cách hiệu quả. tracđược thực hiện bởi dịch vụ web.
- Xác thực phù hợp – Xác thực là cơ chế mà qua đó các máy khách có thể thiết lập danh tính của mình với dịch vụ web bằng cách sử dụng một tập hợp thông tin xác thực nhất định có thể chứng minh danh tính đó. Không bao giờ được lưu trữ thông tin xác thực của người dùng, và do đó, nếu sử dụng WS Security để gọi dịch vụ web, cần lưu ý rằng dịch vụ web không được lưu trữ thông tin xác thực được gửi trong tiêu đề SOAP. Những thông tin này phải được dịch vụ web loại bỏ.














