WCF - Bảo mật

Dịch vụ WCF tự hào có một hệ thống bảo mật mạnh mẽ với hai chế độ hoặc cấp độ bảo mật để chỉ một khách hàng chủ định mới có thể truy cập các dịch vụ. Các mối đe dọa bảo mật phổ biến trong một giao dịch phân tán được WCF kiểm duyệt ở mức độ lớn.

Các tính năng bảo mật chính

Dịch vụ WCF có bốn tính năng bảo mật chính như được mô tả trong hình bên dưới.

  • Authentication - Ở đây, xác thực không chỉ giới hạn trong việc xác định người gửi tin nhắn, mà là xác thực lẫn nhau, tức là cần xác thực người nhận tin nhắn để loại trừ khả năng xảy ra bất kỳ loại tấn công trung gian nào.

  • Authorization- Đây là bước tiếp theo được thực hiện bởi một dịch vụ WCF để đảm bảo an ninh và ở đây nó sẽ xác định xem dịch vụ có nên cho phép người gọi tiếp tục hay không. Mặc dù ủy quyền không phụ thuộc vào xác thực, nó thường tuân theo xác thực.

  • Confidentiality- Việc trao đổi thông tin giữa người gọi và một dịch vụ được giữ bí mật để hạn chế việc người khác giải thích thông tin đó không nhằm mục đích sử dụng. Để làm được điều này, mã hóa được sử dụng cùng với nhiều cơ chế khác.

  • Integrity - Khái niệm chính cuối cùng là duy trì tính toàn vẹn, nghĩa là cung cấp sự đảm bảo rằng thông điệp không bị can thiệp bởi bất kỳ ai trong hành trình của nó từ người gửi đến người nhận.

Chuyển chế độ bảo mật

WCF cung cấp các chế độ bảo mật truyền sau đây để đảm bảo giao tiếp an toàn giữa máy khách và máy chủ. Các chế độ bảo mật chuyển tiền đa dạng được đề cập dưới đây.

  • None- Chế độ này không đảm bảo bất kỳ loại bảo mật tin nhắn nào và dịch vụ không nhận được bất kỳ thông tin xác thực nào về khách hàng. Chế độ này rất rủi ro, vì nó có thể cho phép giả mạo tin nhắn và do đó không được khuyến khích.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "None"/>
   </binding>
</wsHttpBinding>
  • Transport- Chế độ này là cách dễ nhất để đạt được việc truyền thông điệp an toàn thông qua việc sử dụng các giao thức truyền thông như TCP, IPC, Https và MSMQ. Chế độ này hiệu quả hơn khi truyền là điểm-điểm và được sử dụng chủ yếu trong môi trường được kiểm soát, tức là các ứng dụng mạng nội bộ.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Transport"/>
   </binding>
</wsHttpBinding>
  • Message- Chế độ bảo mật cho phép xác thực lẫn nhau và cung cấp quyền riêng tư ở mức độ lớn vì các tin nhắn được mã hóa và có thể được chuyển qua http, đây không được coi là một giao thức an toàn. Ở đây, bảo mật được cung cấp từ đầu đến cuối mà không cần xem xét có bao nhiêu người trung gian tham gia vào quá trình truyền thông điệp và liệu có sự vận chuyển an toàn hay không. Chế độ này thường được sử dụng bởi các ứng dụng internet.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Message"/>
   </binding>
</wsHttpBinding>
  • Mixed - Chế độ bảo mật này không được sử dụng thường xuyên và xác thực máy khách chỉ được cung cấp ở cấp máy khách.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • Both- Chế độ bảo mật này bao gồm cả bảo mật truyền tải và bảo mật tin nhắn để cung cấp một lớp bảo mật mạnh mẽ, nhưng thường dẫn đến quá tải hiệu suất tổng thể. Điều này chỉ được hỗ trợ bởi MSMQ.

<netMsmqBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Both"/>
   </binding>
</netMsmqBinding>

Tất cả các ràng buộc WCF ngoại trừ BasicHttpBinding đều có một số mức độ bảo mật truyền theo mặc định.

Mức độ bảo mật tin nhắn

Bảo mật mức thông báo không phụ thuộc vào các giao thức WCF. Nó được sử dụng với chính dữ liệu tin nhắn bằng cách mã hóa dữ liệu bằng cách sử dụng một thuật toán tiêu chuẩn. Một số thông tin xác thực khách hàng có sẵn cho các ràng buộc khác nhau đối với cấp độ bảo mật của thư và những thông tin này được thảo luận bên dưới.

Client credentials for message level security in WCF

None- Ở đây, mã hóa được sử dụng để bảo mật tin nhắn, trong khi không có xác thực máy khách nào được thực hiện có nghĩa là dịch vụ có thể được truy cập bởi máy khách ẩn danh. Ngoại trừ BasicHttpBinding, tất cả các ràng buộc WCF đều hỗ trợ thông tin xác thực ứng dụng khách này. Tuy nhiên, cần lưu ý rằng đối với NetNamedPipeBinding, thông tin xác thực ứng dụng khách này hoàn toàn không khả dụng.

  • Windows- Tại đây, cả mã hóa tin nhắn và xác thực máy khách đều diễn ra cho người dùng đã đăng nhập theo thời gian thực. Trong trường hợp này, không giống như tất cả các ràng buộc WCF khác, NetNamedPipeBinding không khả dụng và BasicHttpBinding không hỗ trợ.

  • UserName- Tại đây, các tin nhắn được mã hóa cũng như bảo mật bằng cách cung cấp Tên người dùng và khách hàng được xác thực khi họ cần cung cấp mật khẩu. BasicHttpBinding cũng giống như hai thông tin đăng nhập máy khách ở trên, không hỗ trợ Tên người dùng và nó không khả dụng cho NetNamedPipeBinding.

  • Certificate- Cùng với mã hóa tin nhắn, cả máy khách và dịch vụ đều nhận được xác thực bằng chứng chỉ. Thông tin xác thực ứng dụng khách này có sẵn và được hỗ trợ bởi tất cả các ràng buộc WCF ngoại trừ NetNamedPipeBinding.

  • IssuedToken- Mã thông báo được cấp từ một cơ quan như Cardspace được sử dụng để xác thực tin nhắn. Mã hóa tin nhắn cũng được thực hiện ở đây.

Đoạn mã sau đây cho thấy cách thông tin đăng nhập của ứng dụng khách được cấu hình trong chế độ / cấp độ bảo mật thư WCF.

<netTcpBinding>
   <binding name = "WCFMessageSecurityExample">
      <security mode = "Message">
         <message clientCredentialType = "None"/>
      </security>   
   </binding>
</netTcpBinding>

<netMsmqBinding>...</netMsmqBinding>
</bindings>
<behaviors>...</behaviors>

Ở đây, cần lưu ý rằng chế độ bảo mật truyền tải có lợi thế hơn cấp độ bảo mật tin nhắn, vì chế độ này nhanh hơn. Nó không yêu cầu bất kỳ mã hóa bổ sung nào và cung cấp hỗ trợ khả năng tương tác, do đó không làm giảm hiệu suất tổng thể.

Tuy nhiên, từ quan điểm bảo mật, chế độ bảo mật tin nhắn mạnh hơn và độc lập với các giao thức và cung cấp bảo mật đầu cuối.