Udostępnij za pośrednictwem


Wybieranie typu poświadczeń

Poświadczenia to dane używane przez program Windows Communication Foundation (WCF) do ustanowienia tożsamości lub możliwości. Na przykład paszport jest poświadczenie rządu kwestie, aby udowodnić obywatelstwo w kraju lub regionie. W programie WCF poświadczenia mogą przyjmować wiele formularzy, takich jak tokeny nazw użytkowników i certyfikaty X.509. W tym temacie omówiono poświadczenia, sposób ich użycia w programie WCF oraz sposób wybierania odpowiednich poświadczeń dla aplikacji.

W wielu krajach i regionach prawo jazdy jest przykładem poświadczenia. Licencja zawiera dane reprezentujące tożsamość i możliwości danej osoby. Zawiera dowód posiadania w postaci obrazu opętającego. Licencja jest wystawiana przez zaufany urząd, zwykle departament administracji rządowej licencjonowania. Licencja jest zapieczętowana i może zawierać hologram pokazujący, że nie został naruszony ani sfałszowany.

Prezentowanie poświadczeń obejmuje przedstawienie zarówno danych, jak i dowodu posiadania danych. Program WCF obsługuje różne typy poświadczeń zarówno na poziomach zabezpieczeń transportu, jak i komunikatów. Rozważmy na przykład dwa typy poświadczeń obsługiwanych w programie WCF: nazwa użytkownika i poświadczenia certyfikatu X.509.

W przypadku poświadczeń nazwy użytkownika nazwa użytkownika reprezentuje żądaną tożsamość, a hasło zapewnia dowód posiadania. Zaufany urząd w tym przypadku to system, który weryfikuje nazwę użytkownika i hasło.

Przy użyciu poświadczeń certyfikatu X.509 nazwa podmiotu, alternatywne nazwy podmiotu lub określone pola w certyfikacie mogą być używane jako oświadczenia tożsamości, podczas gdy inne pola, takie jak Valid From i Valid To , określają ważność certyfikatu.

Typy poświadczeń transportu

W poniższej tabeli przedstawiono możliwe typy poświadczeń klienta, które mogą być używane przez powiązanie w trybie zabezpieczeń transportu. Podczas tworzenia usługi ustaw ClientCredentialType właściwość na jedną z tych wartości, aby określić typ poświadczeń, które klient musi podać, aby komunikować się z usługą. Można ustawić typy w kodzie lub plikach konfiguracji.

Ustawienie opis
None Określa, że klient nie musi prezentować żadnych poświadczeń. Przekłada się to na anonimowego klienta.
Podstawowy Określa uwierzytelnianie podstawowe dla klienta. Aby uzyskać dodatkowe informacje, zobacz RFC2617 — Uwierzytelnianie HTTP: uwierzytelnianie podstawowe i szyfrowane.
Szyfrowane Określa uwierzytelnianie szyfrowane dla klienta. Aby uzyskać dodatkowe informacje, zobacz RFC2617 — Uwierzytelnianie HTTP: uwierzytelnianie podstawowe i szyfrowane.
Ntlm Określa uwierzytelnianie NT LAN Manager (NTLM). Jest to używane, gdy z jakiegoś powodu nie można używać uwierzytelniania Kerberos. Można również wyłączyć jego użycie jako rezerwowe, ustawiając AllowNtlm właściwość na falsewartość , co powoduje, że program WCF w celu zgłoszenia wyjątku w przypadku użycia protokołu NTLM. Należy pamiętać, że ustawienie tej właściwości na wartość może nie uniemożliwiać false wysyłania poświadczeń NTLM za pośrednictwem przewodu.
Windows Określa uwierzytelnianie systemu Windows. Aby określić tylko protokół Kerberos w domenie systemu Windows, ustaw AllowNtlm właściwość na false (wartość domyślna to true).
Certyfikat Przeprowadza uwierzytelnianie klienta przy użyciu certyfikatu X.509.
Hasło Użytkownik musi podać nazwę użytkownika i hasło. Zweryfikuj parę nazw użytkowników/haseł przy użyciu uwierzytelniania systemu Windows lub innego rozwiązania niestandardowego.

Typy poświadczeń klienta komunikatów

W poniższej tabeli przedstawiono możliwe typy poświadczeń, których można użyć podczas tworzenia aplikacji korzystającej z zabezpieczeń komunikatów. Możesz użyć tych wartości w kodzie lub plikach konfiguracji.

Ustawienie opis
None Określa, że klient nie musi prezentować poświadczeń. Przekłada się to na anonimowego klienta.
Windows Umożliwia wymianę komunikatów protokołu SOAP w kontekście zabezpieczeń ustanowionym przy użyciu poświadczeń systemu Windows.
Username Umożliwia usłudze wymaganie uwierzytelnienia klienta przy użyciu poświadczeń nazwy użytkownika. Należy pamiętać, że program WCF nie zezwala na żadne operacje kryptograficzne z nazwami użytkowników, takie jak generowanie podpisu lub szyfrowanie danych. Program WCF zapewnia, że transport jest zabezpieczony podczas korzystania z poświadczeń nazwy użytkownika.
Certyfikat Umożliwia usłudze wymaganie uwierzytelnienia klienta przy użyciu certyfikatu X.509.
Wystawiony token Niestandardowy typ tokenu skonfigurowany zgodnie z zasadami zabezpieczeń. Domyślnym typem tokenu jest Security Assertions Markup Language (SAML). Token jest wystawiany przez usługę bezpiecznego tokenu. Aby uzyskać więcej informacji, zobacz Federacja i Wystawione tokeny.

Model negocjacji poświadczeń usługi

Negocjacje to proces ustanawiania zaufania między klientem a usługą przez wymianę poświadczeń. Proces jest wykonywany iteracyjnie między klientem a usługą, tak aby ujawnić tylko informacje niezbędne do następnego kroku w procesie negocjacji. W praktyce wynikiem końcowym jest dostarczenie poświadczeń usługi do klienta do użycia w kolejnych operacjach.

Z jednym wyjątkiem domyślnie powiązania dostarczone przez system w programie WCF negocjują poświadczenia usługi automatycznie podczas korzystania z zabezpieczeń na poziomie komunikatów. (Wyjątek to BasicHttpBinding, który domyślnie nie włącza zabezpieczeń). Aby wyłączyć to zachowanie, zobacz NegotiateServiceCredential właściwości i NegotiateServiceCredential .

Uwaga

Gdy zabezpieczenia SSL są używane z programem .NET Framework 3.5 lub nowszym, klient programu WCF używa zarówno certyfikatów pośrednich w magazynie certyfikatów, jak i certyfikatów pośrednich odebranych podczas negocjacji SSL w celu przeprowadzenia weryfikacji łańcucha certyfikatów na certyfikacie usługi. Program .NET Framework 3.0 używa tylko certyfikatów pośrednich zainstalowanych w lokalnym magazynie certyfikatów.

Negocjacje poza pasmem

Jeśli automatyczne negocjowanie jest wyłączone, poświadczenia usługi należy aprowizować na kliencie przed wysłaniem komunikatów do usługi. Jest to również nazywane aprowizowaniem poza pasmem. Jeśli na przykład określony typ poświadczeń jest certyfikatem, a automatyczne negocjowanie jest wyłączone, klient musi skontaktować się z właścicielem usługi, aby odebrać i zainstalować certyfikat na komputerze z uruchomioną aplikacją kliencką. Można to zrobić, na przykład, gdy chcesz ściśle kontrolować, którzy klienci mogą uzyskiwać dostęp do usługi w scenariuszu biznesowym. Te negocjacje poza pasmem można wykonać w wiadomości e-mail, a certyfikat X.509 jest przechowywany w magazynie certyfikatów systemu Windows przy użyciu narzędzia takiego jak przystawka Certyfikaty programu Microsoft Management Console (MMC).

Uwaga

Właściwość ClientCredentials jest używana do dostarczania usługi certyfikatu, który został osiągnięty przez negocjacje poza pasmem. Jest to konieczne w przypadku korzystania z BasicHttpBinding klasy, ponieważ powiązanie nie zezwala na zautomatyzowane negocjacje. Właściwość jest również używana w niekorzystywanym scenariuszu dwukierunkowym. Jest to scenariusz, w którym serwer wysyła komunikat do klienta bez konieczności wcześniejszego wysyłania żądania do serwera przez klienta. Ponieważ serwer nie ma żądania od klienta, musi użyć certyfikatu klienta, aby zaszyfrować komunikat do klienta.

Ustawianie wartości poświadczeń

Po wybraniu trybu zabezpieczeń należy określić rzeczywiste poświadczenia. Jeśli na przykład typ poświadczeń jest ustawiony na "certyfikat", musisz skojarzyć określone poświadczenia (takie jak określony certyfikat X.509) z usługą lub klientem.

W zależności od tego, czy programujesz usługę, czy klienta, metoda ustawiania wartości poświadczeń różni się nieznacznie.

Ustawianie poświadczeń usługi

Jeśli używasz trybu transportu i używasz protokołu HTTP jako transportu, musisz użyć usług Internet Information Services (IIS) lub skonfigurować port przy użyciu certyfikatu. Aby uzyskać więcej informacji, zobacz Transport Security Overview (Omówienie zabezpieczeń transportu) i HTTP Transport Security (Zabezpieczenia transportu HTTP).

Aby aprowizować usługę z poświadczeniami w kodzie, utwórz wystąpienie ServiceHost klasy i określ odpowiednie poświadczenia przy użyciu ServiceCredentials klasy, do których Credentials uzyskuje dostęp za pośrednictwem właściwości .

Ustawianie certyfikatu

Aby aprowizować usługę przy użyciu certyfikatu X.509, który ma być używany do uwierzytelniania usługi na klientach, użyj SetCertificate metody X509CertificateRecipientServiceCredential klasy .

Aby aprowizować usługę przy użyciu certyfikatu klienta, użyj SetCertificate metody X509CertificateInitiatorServiceCredential klasy .

Ustawianie poświadczeń systemu Windows

Jeśli klient określa prawidłową nazwę użytkownika i hasło, to poświadczenie jest używane do uwierzytelniania klienta. W przeciwnym razie używane są bieżące poświadczenia zalogowanego użytkownika.

Ustawianie poświadczeń klienta

W programie WCF aplikacje klienckie używają klienta WCF do łączenia się z usługami. Każdy klient pochodzi z ClientBase<TChannel> klasy, a ClientCredentials właściwość na kliencie umożliwia określenie różnych wartości poświadczeń klienta.

Ustawianie certyfikatu

Aby aprowizować usługę przy użyciu certyfikatu X.509 używanego do uwierzytelniania klienta w usłudze, użyj SetCertificate metody X509CertificateInitiatorClientCredential klasy .

Jak poświadczenia klienta są używane do uwierzytelniania klienta w usłudze

Informacje o poświadczeniach klienta wymagane do komunikowania się z usługą są udostępniane przy użyciu ClientCredentials właściwości lub Credentials właściwości. Kanał zabezpieczeń używa tych informacji do uwierzytelniania klienta w usłudze. Uwierzytelnianie odbywa się za pomocą jednego z dwóch trybów:

  • Poświadczenia klienta są używane raz przed wysłaniem pierwszego komunikatu przy użyciu wystąpienia klienta WCF w celu ustanowienia kontekstu zabezpieczeń. Wszystkie komunikaty aplikacji są następnie zabezpieczone za pośrednictwem kontekstu zabezpieczeń.

  • Poświadczenia klienta są używane do uwierzytelniania każdego komunikatu aplikacji wysyłanego do usługi. W takim przypadku żaden kontekst nie jest ustanawiany między klientem a usługą.

Nie można zmienić ustanowionych tożsamości

Gdy jest używana pierwsza metoda, ustalony kontekst jest trwale skojarzony z tożsamością klienta. Oznacza to, że po ustanowieniu kontekstu zabezpieczeń nie można zmienić tożsamości skojarzonej z klientem.

Ważne

Istnieje sytuacja, o której należy pamiętać, gdy nie można przełączyć tożsamości (oznacza to, że podczas ustanawiania kontekstu zabezpieczeń jest włączone, zachowanie domyślne). Jeśli tworzysz usługę komunikującą się z drugą usługą, nie można zmienić tożsamości używanej do otwierania klienta programu WCF w drugiej usłudze. Staje się to problemem, jeśli wielu klientów może używać pierwszej usługi, a usługa personifikuje klientów podczas uzyskiwania dostępu do drugiej usługi. Jeśli usługa ponownie używa tego samego klienta dla wszystkich wywołujących, wszystkie wywołania drugiej usługi są wykonywane w ramach tożsamości pierwszego obiektu wywołującego, który został użyty do otwarcia klienta w drugiej usłudze. Innymi słowy, usługa używa tożsamości pierwszego klienta dla wszystkich swoich klientów do komunikowania się z drugą usługą. Może to prowadzić do podniesienia uprawnień. Jeśli nie jest to pożądane zachowanie usługi, należy śledzić każdy obiekt wywołujący i utworzyć nowego klienta do drugiej usługi dla każdego odrębnego obiektu wywołującego i upewnić się, że usługa używa tylko odpowiedniego klienta dla odpowiedniego obiektu wywołującego do komunikowania się z drugą usługą.

Aby uzyskać więcej informacji na temat poświadczeń i bezpiecznych sesji, zobacz Zagadnienia dotyczące zabezpieczeń dla bezpiecznych sesji.

Zobacz też