Instrukcje: Tworzenie poświadczeń pomocniczych
Istnieje możliwość posiadania niestandardowego schematu zabezpieczeń, który wymaga więcej niż jednego poświadczenia. Na przykład usługa może zażądać od klienta nie tylko nazwy użytkownika i hasła, ale także poświadczeń, które dowodzą, że klient ma ponad 18 lat. Drugie poświadczenie to poświadczenia pomocnicze. W tym temacie wyjaśniono, jak zaimplementować takie poświadczenia w kliencie programu Windows Communication Foundation (WCF).
Uwaga
Specyfikacja obsługi poświadczeń jest częścią specyfikacji WS-SecurityPolicy. Aby uzyskać więcej informacji, zobacz Specyfikacje zabezpieczeń usług sieci Web.
Obsługa tokenów
Krótko mówiąc, gdy używasz zabezpieczeń komunikatów, podstawowe poświadczenia są zawsze używane do zabezpieczania komunikatu (na przykład certyfikatU X.509 lub biletu Protokołu Kerberos).
Zgodnie ze specyfikacją powiązanie zabezpieczeń używa tokenów do zabezpieczenia wymiany komunikatów . Token jest reprezentacją poświadczeń zabezpieczeń.
Powiązanie zabezpieczeń używa tokenu podstawowego zidentyfikowanego w zasadach powiązania zabezpieczeń w celu utworzenia podpisu. Ten podpis jest określany jako podpis wiadomości.
Dodatkowe tokeny można określić w celu rozszerzenia oświadczeń dostarczonych przez token skojarzony z podpisem komunikatu.
Aprowizowanie, podpisywanie i szyfrowanie
Poświadczenie pomocnicze powoduje przekazanie tokenu pomocniczego wewnątrz komunikatu. Specyfikacja WS-SecurityPolicy definiuje cztery sposoby dołączania tokenu pomocniczego do komunikatu, zgodnie z opisem w poniższej tabeli.
Purpose | opis |
---|---|
Podpisane | Token pomocniczy jest dołączany do nagłówka zabezpieczeń i jest podpisany przez podpis wiadomości. |
Popierając | Token popierający podpis wiadomości podpisuje. |
Podpisane i endoring | Podpisane tokeny aproryzowania podpisują cały ds:Signature element wygenerowany na podstawie podpisu wiadomości i są podpisywane przez ten podpis wiadomości. Oznacza to, że oba tokeny (token używany do podpisu wiadomości i podpisany token aprowizowania) podpisują się nawzajem. |
Podpisane i szyfrujące | Podpisane, zaszyfrowane tokeny pomocnicze są podpisane tokeny pomocnicze, które są również szyfrowane, gdy są wyświetlane w pliku wsse:SecurityHeader . |
Poświadczenia pomocnicze programowania
Aby utworzyć usługę korzystającą z tokenów pomocniczych, należy utworzyć <element customBinding>. (Aby uzyskać więcej informacji, zobacz Instrukcje: tworzenie powiązania niestandardowego przy użyciu elementu SecurityBindingElement).
Pierwszym krokiem podczas tworzenia powiązania niestandardowego jest utworzenie elementu powiązania zabezpieczeń, który może być jednym z trzech typów:
Wszystkie klasy dziedziczą z SecurityBindingElementklasy , która zawiera cztery odpowiednie właściwości:
Zakresy
Istnieją dwa zakresy obsługi poświadczeń:
Punkty końcowe obsługujące tokeny obsługują wszystkie operacje punktu końcowego. Oznacza to, że poświadczenie reprezentowane przez token pomocniczy może być używane za każdym razem, gdy są wywoływane dowolne operacje punktu końcowego.
Operacja obsługi tokenów obsługuje tylko określoną operację punktu końcowego.
Zgodnie z nazwami właściwości, poświadczenia pomocnicze mogą być wymagane lub opcjonalne. Oznacza to, że jeśli jest używane poświadczenie pomocnicze, chociaż nie jest konieczne, ale uwierzytelnianie nie zakończy się niepowodzeniem, jeśli nie jest obecny.
z konkretnym obiektem
Aby utworzyć powiązanie niestandardowe zawierające poświadczenia pomocnicze
Utwórz element powiązania zabezpieczeń. Poniższy przykład umożliwia utworzenie elementu SymmetricSecurityBindingElement z trybem
UserNameForCertificate
uwierzytelniania. Użyj metody CreateUserNameForCertificateBindingElement.Dodaj parametr pomocniczy do kolekcji typów zwracanych przez odpowiednią właściwość (
Endorsing
,Signed
,SignedEncrypted
lubSignedEndorsed
). Typy w System.ServiceModel.Security.Tokens przestrzeni nazw obejmują często używane typy, takie jak X509SecurityTokenParameters.
Przykład
opis
Poniższy przykład tworzy wystąpienie klasy i dodaje wystąpienie SymmetricSecurityBindingElementKerberosSecurityTokenParameters klasy do kolekcji zwróconą właściwość Endorsing.
Kod
public static Binding CreateMultiFactorAuthenticationBinding()
{
HttpTransportBindingElement httpTransport = new HttpTransportBindingElement();
// The message security binding element will be configured to require 2 tokens:
// 1) A user name/password encrypted with the service token.
// 2) A client certificate used to sign the message.
// Instantiate a binding element that will require the user name/password token
// in the message (encrypted with the server certificate).
SymmetricSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameForCertificateBindingElement();
// Create supporting token parameters for the client X.509 certificate.
X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
// Specify that the supporting token is passed in the message send by the client to the service.
clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
// Turn off derived keys.
clientX509SupportingTokenParameters.RequireDerivedKeys = false;
// Augment the binding element to require the client's X.509 certificate as an
// endorsing token in the message.
messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);
// Create a CustomBinding based on the constructed security binding element.
return new CustomBinding(messageSecurity, httpTransport);
}