WCF - bezpieczeństwo

Usługa WCF oferuje niezawodny system zabezpieczeń z dwoma trybami lub poziomami zabezpieczeń, dzięki czemu tylko zamierzony klient może uzyskać dostęp do usług. Zagrożenia bezpieczeństwa, które są typowe w transakcji rozproszonej, są w dużym stopniu moderowane przez usługę WCF.

Kluczowe funkcje bezpieczeństwa

Usługa WCF ma cztery kluczowe funkcje zabezpieczeń, jak pokazano na poniższym rysunku.

  • Authentication - W tym przypadku uwierzytelnianie nie ogranicza się do identyfikacji nadawcy wiadomości, ale jest wzajemne, tj. Uwierzytelnienie odbiorcy wiadomości jest wymagane, aby wykluczyć możliwość jakiegokolwiek ataku pośrednika.

  • Authorization- Jest to następny krok wykonywany przez usługę WCF w celu zapewnienia bezpieczeństwa i tutaj określa się, czy usługa powinna autoryzować obiekt wywołujący do kontynuowania, czy nie. Chociaż autoryzacja nie jest zależna od uwierzytelnienia, zwykle następuje po uwierzytelnieniu.

  • Confidentiality- Wymiana informacji między dzwoniącym a usługą jest poufna, aby ograniczyć jej interpretację przez inne osoby, dla których wiadomość nie jest przeznaczona. Aby było to możliwe, szyfrowanie jest używane wraz z szeroką gamą innych mechanizmów.

  • Integrity - Ostatnią kluczową koncepcją jest zachowanie integralności, tj. Zapewnienie, że wiadomość nie została przez nikogo naruszona podczas jej podróży od nadawcy do odbiorcy.

Tryb bezpieczeństwa transferu

Usługa WCF oferuje następujące tryby zabezpieczeń transferu, aby zapewnić bezpieczną komunikację między klientem a serwerem. Poniżej wymieniono różne tryby bezpieczeństwa transferu.

  • None- Ten tryb nie gwarantuje żadnego rodzaju bezpieczeństwa wiadomości, a usługa nie uzyskuje żadnych danych uwierzytelniających o kliencie. Ten tryb jest bardzo ryzykowny, ponieważ może pozwolić na manipulowanie wiadomościami i dlatego nie jest zalecany.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "None"/>
   </binding>
</wsHttpBinding>
  • Transport- Ten tryb to najłatwiejszy sposób na bezpieczne przesyłanie wiadomości przy użyciu protokołów komunikacyjnych, takich jak TCP, IPC, Https i MSMQ. Ten tryb jest bardziej efektywny, gdy transfer odbywa się z punktu do punktu i jest używany głównie w kontrolowanym środowisku, tj. Aplikacjach intranetowych.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Transport"/>
   </binding>
</wsHttpBinding>
  • Message- Tryb bezpieczeństwa umożliwia wzajemne uwierzytelnianie i zapewnia w dużym stopniu prywatność, ponieważ wiadomości są szyfrowane i mogą być przesyłane za pośrednictwem protokołu HTTP, który nie jest uważany za bezpieczny protokół. W tym przypadku bezpieczeństwo jest zapewniane od końca do końca bez uwzględnienia liczby pośredników zaangażowanych w przesyłanie wiadomości i czy istnieje zabezpieczony transport, czy nie. Tryb jest używany zazwyczaj przez aplikacje internetowe.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "Message"/>
   </binding>
</wsHttpBinding>
  • Mixed - Ten tryb zabezpieczeń nie jest często używany, a uwierzytelnianie klienta jest oferowane tylko na poziomie klienta.

<wsHttpBinding>
   <binding name = "WCFSecurityExample">
      <security mode = "TransportWithMessageCredential"/>
   </binding>
</wsHttpBinding>
  • Both- Ten tryb bezpieczeństwa obejmuje zarówno zabezpieczenia transportu, jak i zabezpieczenia wiadomości, aby zapewnić solidną ochronę, ale często powoduje przeciążenie ogólnej wydajności. Ten jest obsługiwany tylko przez usługę MSMQ.

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

Wszystkie powiązania WCF z wyjątkiem BasicHttpBinding mają domyślnie pewien zakres zabezpieczeń transferu.

Poziom bezpieczeństwa wiadomości

Zabezpieczenia na poziomie wiadomości nie są zależne od protokołów WCF. Jest stosowany w przypadku samych danych wiadomości poprzez szyfrowanie danych przy użyciu standardowego algorytmu. Dostępnych jest wiele poświadczeń klienta dla różnych powiązań dla poziomu bezpieczeństwa wiadomości i zostały one omówione poniżej.

Client credentials for message level security in WCF

None- Tutaj szyfrowanie jest używane do zabezpieczenia wiadomości, podczas gdy nie jest przeprowadzane uwierzytelnianie klienta, co oznacza, że ​​dostęp do usługi może uzyskać anonimowy klient. Z wyjątkiem BasicHttpBinding, wszystkie powiązania WCF obsługują to poświadczenie klienta. Należy jednak zauważyć, że w przypadku NetNamedPipeBinding to poświadczenie klienta nie jest w ogóle dostępne.

  • Windows- Tutaj zarówno szyfrowanie wiadomości, jak i uwierzytelnianie klienta mają miejsce dla zalogowanego użytkownika w czasie rzeczywistym. W tym przypadku również, w przeciwieństwie do wszystkich innych powiązań WCF, NetNamedPipeBinding nie jest dostępny, a BasicHttpBinding nie obsługuje jego obsługi.

  • UserName- Tutaj wiadomości są szyfrowane i zabezpieczane poprzez oferowanie nazwy użytkownika, a klienci są uwierzytelniani, ponieważ muszą podać hasło. BasicHttpBinding, podobnie jak powyższe dwa poświadczenia klienta, nie obsługuje nazwy użytkownika i nie jest dostępne dla NetNamedPipeBinding.

  • Certificate- Wraz z szyfrowaniem wiadomości zarówno klient, jak i usługa otrzymują uwierzytelnienie za pomocą certyfikatu. To poświadczenie klienta jest dostępne i jest obsługiwane przez wszystkie powiązania WCF z wyjątkiem NetNamedPipeBinding.

  • IssuedToken- Tokeny wydane przez instytucję, taką jak Cardspace, służą do uwierzytelniania wiadomości. Tutaj również odbywa się szyfrowanie wiadomości.

Poniższy kod przedstawia sposób konfigurowania poświadczeń klienta na poziomie / trybie zabezpieczeń komunikatów programu WCF.

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

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

W tym miejscu należy zauważyć, że tryb bezpieczeństwa transportu ma przewagę nad poziomem bezpieczeństwa wiadomości, ponieważ ten pierwszy jest szybszy. Nie wymaga dodatkowego kodowania i zapewnia wsparcie w zakresie współdziałania, a tym samym nie zmniejsza ogólnej wydajności.

Jednak z punktu widzenia bezpieczeństwa tryb bezpieczeństwa wiadomości jest bardziej niezawodny, niezależny od protokołów i zapewnia pełne bezpieczeństwo.