Hướng dẫn Bảo mật Dịch vụ Web (WS) với SOAP Ví dụ

Mục lục:

Anonim

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

WS Security là một tiêu chuẩn đề cập đến 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ó rất phổ biến để 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 được tiếp xúc với internet, nên luôn có khả năng 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 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.

Trong hướng dẫn này, bạn sẽ học-

  • Các Đe doạ An ninh và Biện pháp Đối phó
  • Tiêu chuẩn bảo mật dịch vụ web
  • Cách xây dựng các dịch vụ web an toàn
  • Các phương pháp hay nhất về bảo mật dịch vụ web

Các Đe doạ An ninh và Biện pháp Đối phó

Để hiểu các mối đe dọa bảo mật có thể thù địch với một ứ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 nó hoạt động như thế nào 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 giao tiếp an toàn giữa máy khách và máy chủ qua web. HTTPS sử dụng lớp Cổng bảo mật hoặc SSL để giao tiếp an toàn. Cả máy khách và máy chủ sẽ có chứng chỉ kỹ thuật số để tự xác đị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ủ.

Trong giao tiếp HTTPS tiêu chuẩn giữa máy khách và máy chủ, các bước sau sẽ 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ú trong hệ thống bộ nhớ cache của nó để nó biết phản hồi chỉ nên quay trở lại ứng dụng khách này.
  2. Sau đó, máy chủ 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 giao tiếp 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ủ đượ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 kiểu bảo mật trên sẽ không hoạt động trong mọi tình huống. Có thể có lúc máy khách 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 ứng dụng khách đang nói chuyện với cả cơ sở dữ liệu và máy chủ web tại một thời điểm. Trong những trường hợp như vậy, không phải tất cả thông tin đều có thể chuyển qua giao thức https.

Đây là lúc SOAP hành động để vượt qua những trở ngại như vậy bằng cách đưa ra đặc tả Bảo mật của WS. Với đặc điểm kỹ thuậ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 bên dưới

  1. Nếu thông báo trong phần thân 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 SOAP Body được mã hóa, phần đầu sẽ chứa các khóa mã hóa cần thiết để thư có thể được giải mã khi nó đến đích.

Trong môi trường nhiều máy chủ, kỹ thuật xác thực SOAP ở trên sẽ giúp theo cách sau.

  • Vì phần thân SOAP được mã hóa, nó sẽ 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 thông báo được chuyển đế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ác cơ chế phù hợp để làm như vậy.
  • 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ã 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 tiêu chuẩn Bảo mật WS có thể được sử dụng cho SOAP.

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 đăng nhập 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 được 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 vào dịch vụ web.

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 trường hợp sử dụng các kỹ thuật mã hóa như Kerberos hoặc X.509.

Sơ đồ dưới đây cho thấy 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 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 đặ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ế.
  2. Mã thông báo bảo mật sau đó được chuyển đến máy khách dịch vụ Web.
  3. Máy khách dịch vụ Web sau đó 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 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 yếu tố bổ sung, một là Tên người dùng và một là Mật khẩu.

Khi Thông điệp SOAP thực sự được chuyển giữa các máy khách và máy chủ, phần của thông báo chứa thông tin đăng nhập của người dùng có thể trông giống như được hiển thị ở trên. Tên phần tử wsse là một phần tử đặc biệt được đặt tên 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 xét ví dụ về bảo mật dịch vụ web SOAP. Chúng tôi sẽ xây dựng một 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 một lớp bảo mật cho nó.

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 đăng nhập 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 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 ứng dụng Web Asp.Net trống. Từ Visual Studio 2013, bấm vào tùy chọn menu Tệp-> Dự án mới.

Khi bạn nhấp vào tùy chọn Dự án Mới, Visual Studio sau đó 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 mẫu web C # 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 sau đó sẽ thực hiện các bước cần thiết để thêm các tệp cần thiết được yêu cầu bởi bất kỳ ứng dụng dựa trên web nào.
  2. Đặt tên cho dự án của bạn mà trong trường hợp của chúng tôi là " webservice.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ữ.

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 bạn trong Visual Studio 2013.

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ư hình dưới đây
  1. Khi bạn 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.

Bước trên sẽ xuất hiện 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 của TutorialService làm tên tệp.

Bước 4) Thêm mã sau vào tệp asmx Dịch vụ Hướng dẫn 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 Tiêu đề SOAP khi thông báo 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 tiêu đề SOAP, 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;}}

Giải thích mã: -

  1. Bây giờ chúng ta đang tạo một lớp riêng biệt có tên là AuthHeader thuộc kiểu lớp SoapHeader . Bất cứ khi nào bạn muốn thay đổi những gì được truyền trong tiêu đề SOAP, người ta 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 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' thuộc loại 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) Là bước tiếp theo, 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à một dịch vụ Web Guru99" cho máy khách. Nhưng lần này, chuỗi sẽ chỉ được trả lại nếu ứng dụng khách chuyển thông tin đăng nhập 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);}eisereturn "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 Guru99Webservice của chúng tôi, 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] bây giờ đượ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.
  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 đến máy khách. Nếu không, một lỗi sẽ được gửi đến máy khách nếu chuyển sai id người dùng và mật khẩu.

Nếu mã được thực thi thành công, Đầu ra sau đây sẽ được hiển thị khi bạn chạy mã của mình trong trình duyệt.

Đầu ra:

Kết quả trên được hiển thị khi chương trình được chạy, có nghĩa là dịch vụ Web hiện đã khả dụng. Hãy nhấp vào liên kết Mô tả dịch vụ.

Từ mô tả dịch vụ, bây giờ bạn sẽ có thể thấy rằng tên người dùng và mật khẩu là các phần tử của tệp WSDL. Các tham số này cần được gửi khi dịch vụ web được gọi.

Các phương pháp hay 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 lưu ý khi làm việc với các dịch vụ Web

  1. Kiểm toán và quản lý Nhật ký - Sử dụ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 một báo cáo chi tiết về ai đã 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.

  2. Luồng cuộc gọi đến dịch vụ web - Cố gắng lưu ý luồng cuộc gọi trong dịch vụ web. Theo mặc định, một ứng dụng có thể gọi yêu cầu nhiều dịch vụ web với mã thông báo 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 đượ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 các 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 được loại bỏ trước khi ghi lại.

  4. Theo dõi Hoạt động Kinh doanh - Theo dõi các hoạt động kinh doanh quan trọng. Ví dụ: công cụ ứng dụng của bạn để ghi lại quyền truy cập vào các phương pháp đặc biệt nhạy cảm và logic nghiệp vụ. 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 điển hình, chẳng hạn như chọn các mặt hàng sẽ mua, các mặt hàng được tải vào giỏ hàng và sau đó là lần mua cuối cùng. Toàn bộ quy trình kinh doanh này cần được theo dõi bởi dịch vụ web.

  5. Xác thực thích hợp - 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, cần lưu ý rằng dịch vụ web không được lưu trữ thông tin đăng nhập được gửi trong tiêu đề SOAP. Những thứ này nên được dịch vụ web loại bỏ.

Tóm lược

  • SOAP cung cấp một lớp bổ sung được gọi là Bảo mật WS để cung cấp bảo mật bổ sung khi các cuộc gọi được thực hiện đến các dịch vụ Web.
  • Bảo mật WS 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 ta đã thấy rằng trong .Net, chúng ta có thể tùy chỉnh dịch vụ Web để sử dụng tên người dùng và mật khẩu như một phần của phần tử tiêu đề SOAP.