Hướng dẫn bảo mật dịch vụ web (WS) với ví dụ SOAP

Bảo mật WS là gì?

Bảo mật WS là một tiêu chuẩn giải quyết vấn đề bảo mật khi dữ liệu được trao đổi như một phần của dịch vụ Web. Đây là một tính năng chính trong SOAP khiến nó trở nên rất phổ biến trong việc tạo 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 tất cả các ứng dụng web đều tiếp xúc với internet nên luôn có nguy cơ xảy ra mối đe dọa bảo mật đối với các ứng dụng web. Do đó, khi phát triển các ứng dụng dựa trên web, bạn luôn nên đảm bảo rằng ứng dụng đó được thiết kế và phát triển có lưu ý đến tính bảo mật.

Các mối đe dọa an ninh và biện pháp đối phó

Để hiểu các mối đe dọa bảo mật có thể gây thù địch với ứng dụng web, chúng ta hãy xem một kịch bản đơn giản về ứng dụng web và xem cách nó hoạt động về mặt Bảo mật.

Một trong những biện pháp bảo mật có sẵn cho HTTP là giao thức HTTPS. HTTPS là cách liên lạc an toàn giữa máy khách và máy chủ qua web. HTTPS sử dụng lớp Ổ cắm bảo mật hoặc SSL để liên lạc an toàn. Cả máy khách và máy chủ sẽ có chứng chỉ kỹ thuật số để tự nhận mình là chính hãng khi có bất kỳ giao tiếp nào xảy ra giữa máy khách và máy chủ.

Các mối đe dọa an ninh và biện pháp đối phó

Trong giao tiếp HTTPS chuẩn giữa máy khách và máy chủ, các bước sau đây diễn ra

  1. 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.
  2. 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ủ.
  3. Tất cả thông tin liên lạc sau đó giữa máy khách và máy chủ đề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ì nó sẽ được mã hóa.

Nhưng loại bảo mật trên sẽ không hoạt động trong mọi tình huống. Có thể đến lúc khách hàng có thể nói chuyện với nhiều máy chủ. Một ví dụ dưới đây cho thấy một máy khách đang nói chuyện 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ể đi qua giao thức https.

Các mối đe dọa an ninh và biện pháp đối phó

Đây là lúc SOAP hoạt động để vượt qua những trở ngại đó bằng cách áp dụng đặc tả Bảo mật WS. Với đặc tả này, tất cả dữ liệu liên quan đến bảo mật được xác định trong phần tử tiêu đề SOAP.

Phần tử tiêu đề có thể chứa thông tin được đề cập dưới đây

  1. 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 đề.
  2. Nếu bất kỳ phần tử nào trong Phần thân SOAP được mã hóa thì tiêu đề sẽ chứa các khóa mã hóa cần thiết để thư 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 có tác dụng hỗ trợ theo 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ử nếu tin nhắn được chuyển đến máy chủ cơ sở dữ liệu theo yêu cầu HTTP thì nó không thể được giải mã vì cơ sở dữ liệu không có cơ chế phù hợp để làm 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, nó mới có thể giải mã được thông báo và gửi phản hồi thích hợp trở lại máy khách.

Chúng ta sẽ xem trong các chủ đề tiếp theo về cách sử dụng tiêu chuẩn WS Security cho XÀ BÔNG TẮM.

Tiêu chuẩn bảo mật dịch vụ web

Như đã thảo luận trong phần trước, tiêu chuẩn WS-Security xoay quanh việc đưa định nghĩa bảo mật vào 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. Điều này được sử dụng để chuyển tên người dùng và mật khẩu cho dịch vụ web.

Một cách khác là sử dụng Mã thông báo nhị phân thông qua BinarySecurityToken. Điều này được sử dụng trong các tình huống sử dụng các kỹ thuật mã hóa như Kerberos hoặc X.509.

Sơ đồ bên dưới thể hiện quy trình hoạt động của mô hình bảo mật trong WS Security

Tiêu chuẩn bảo mật dịch vụ web

Dưới đây là các bước diễn ra trong quy trình làm việc trên

  1. Một yêu cầu có thể được gửi từ máy khách dịch vụ Web tới 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 riêng để 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ế.
  2. Mã thông báo bảo mật sau đó được chuyển đến máy khách dịch vụ Web.
  3. Sau đó, máy khách dịch vụ Web đã 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 báo SOAP.
  4. 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ã dưới đây hiển thị định dạng của phần xác thực là một phần của tài liệu WSDL. Bây giờ dựa trên đoạn mã dưới đây, thông báo SOAP sẽ chứa 2 thành phần bổ sung, một thành phần là Tên người dùng và thành 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 báo SOAP thực sự được chuyển giữa máy khách và máy chủ, phần thông báo chứa thông tin xác thực của người dùng có thể trông giống như thông tin được hiển thị ở trên. Tên phần tử wsse là phần tử đặc biệt có tên được xác định cho SOAP và có nghĩa là nó chứa thông tin dựa trê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 ví dụ về bảo mật dịch vụ web SOAP. Chúng ta sẽ xây dựng bảo mật dịch vụ web dựa trên ví dụ được trình bày trước đó trong chương SOAP và sẽ thêm lớp bảo mật vào đó.

Trong ví dụ của chúng tôi, chúng tôi sẽ tạo một dịch vụ web đơn giản, dịch vụ này sẽ đượ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 điện. Hãy làm theo các bước dưới đây để tạo dịch vụ web SOAP của chúng tôi và thêm định nghĩa bảo mật cho nó.

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.

Xây dựng dịch vụ web an toàn

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,

  1. Đảm bảo rằng trước tiên bạn chọn C# mẫu web 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 mà bất kỳ ứng dụng dựa trên web nào cũng yêu cầu.
  2. Đặ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.asmx.” Sau đó, hãy đảm bảo cung cấp một vị trí nơi các tệp dự án sẽ được lưu trữ.

Xây dựng dịch vụ web an toàn

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.

Xây dựng dịch vụ web an toàn

Bước 3) Trong bước này,

Chúng tôi sẽ thêm một tệp dịch vụ Web vào dự án của chúng tôi

  1. Đầu tiên Nhấp chuột phải vào tệp dự án như hiển thị bên dưới

Xây dựng dịch vụ web an toàn

  1. Sau khi nhấp chuột phải vào tệp dự án, bạn 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 Dịch vụ hướng dẫn cho tệp tên dịch vụ web.

    Xây dựng dịch vụ web an toàn

Bước trên sẽ nhắc một hộp thoại, trong đó người ta 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.

Xây dựng dịch vụ web an toàn

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.

Xây dựng dịch vụ web an toàn

		return "This is a Guru99 Web Service";
	}
	
	public class AuthHeader : SoapHeader
	{
		public string UserName;
		public string Password;

	}
}

Giải thích mã: -

  1. 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 SoapHeader. Bất cứ khi nào bạn muốn thay đổi những gì được chuyển trong tiêu đề SOAP, người ta cần tạo một lớp sử dụng lớp SoapHeader dựng sẵn của .Net. Bằng cách tùy chỉnh SOAPheader, giờ đây chúng tôi có khả năng chuyển 'Tên người dùng' và 'Mật khẩu' khi dịch vụ web được gọi.
  2. 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. Mã này thực sự xác định chức năng của dịch vụ web của chúng tôi. Hàm này trả về một chuỗi “Đây là dịch vụ Web Guru99” cho máy khách. Nhưng lần này, chuỗi sẽ chỉ được trả về nếu ứng dụng khách chuyển thông tin xác thực đến dịch vụ web.

Xây dựng dịch vụ web an toàn

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);
		}
		eise
		return "This is a Guru99 Web service";
	}

Giải thích mã: -

  1. Ở đâ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ẽ.
  2. 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.
  3. Trong khối mã này, chúng tôi thực sự đang kiểm tra tên người dùng và mật khẩu được chuyển khi dịch vụ web được gọi. Nếu Tên người dùng bằng “Guru99” và mật khẩu bằng “Guru99Password” thì thông báo “Đây là dịch vụ Web Guru99” sẽ được chuyển tới khách hàng. Ngược lại, lỗi sẽ được gửi đến máy khách nếu nhập sai id người dùng và mật khẩu.

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:

Xây dựng dịch vụ web an toàn

Kết quả đầu ra trên được hiển thị khi chương trình được chạy, điều đó 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.

Xây dựng dịch vụ web an toàn

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 cân nhắc về bảo mật cần lưu ý khi làm việc với các dịch vụ Web

1. Kiểm tra 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 có bất kỳ vi phạm bảo mật nào xảy ra.

2. Luồng cuộc gọi đến dịch vụ web – Cố gắng ghi lại luồng 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 bằng mã xác thực được chuyể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 phải được theo dõi và ghi lại.

3. Thông tin nhạy cảm – Không đưa thông tin nhạy cảm vào mục nhật ký của bạn như mật khẩu hoặc số thẻ tín dụng hoặc bất kỳ loại thông tin bí mật nào khác. Nếu có một sự kiện có bất kỳ thông tin nào trong số này, nó cần phải bị loại bỏ trước khi ghi nhật ký.

4. Theo dõi hoạt động kinh doanh Operations – Theo dõi các hoạt động kinh doanh quan trọng. Ví dụ: thiết lập ứng dụng của bạn để ghi lại quyền truy cập vào các phương pháp và logic nghiệp vụ đặc biệt nhạy cảm. Hãy lấy một ví dụ về một ứng dụng mua sắm trực tuyến. Có nhiều bước trong một ứng dụng thông thường, chẳng hạn như chọn mặt hàng cần mua, mặt hàng được đưa vào giỏ hàng và sau đó là giao dịch mua cuối cùng. Toàn bộ quy trình công việc kinh doanh này cần được dịch vụ web theo dõi.

5. Xác thực đúng cách – Xác thực là cơ chế mà khách hàng có thể thiết lập danh tính của họ với dịch vụ web bằng cách sử dụng một bộ thông tin xác thực nhất định có thể chứng minh danh tính đó. Người ta không bao giờ nên lưu trữ thông tin xác thực của người dùng và do đó, nếu WS Security được sử dụng để gọi dịch vụ web thì cần lưu ý rằng dịch vụ web không nên lưu trữ thông tin xác thực được gửi trong tiêu đề SOAP. Những thứ này sẽ bị dịch vụ web loại bỏ.

Tổng kết

  • SOAP cung cấp một lớp bổ sung gọi là Bảo mật WS để cung cấp bảo mật bổ sung khi thực hiện các cuộc gọi tới các dịch vụ Web.
  • WS Security có thể được gọi bằng tên người dùng hoặc mật khẩu đơn giản hoặc có thể được sử dụng với chứng chỉ nhị phân để xác thực
  • Chúng tôi đã thấy điều đó trong Net. chúng ta có thể tùy chỉnh dịch vụ Web để chuyển tên người dùng và mật khẩu như một phần của phần tử tiêu đề SOAP.

Tóm tắt bài viết này với: