Postupy: Vytvoření podpůrných přihlašovacích údajů
Je možné mít vlastní schéma zabezpečení, které vyžaduje více než jeden pověření. Služba může například požadovat od klienta nejen uživatelské jméno a heslo, ale také přihlašovací údaje, které prokáže, že klient je starší než 18 let. Druhým přihlašovacím údajem jsou podpůrné přihlašovací údaje. Toto téma vysvětluje, jak tyto přihlašovací údaje implementovat v klientovi WCF (Windows Communication Foundation).
Poznámka:
Specifikace pro podpůrné přihlašovací údaje je součástí specifikace WS-SecurityPolicy. Další informace naleznete v tématu Specifikace zabezpečení webových služeb.
Podpora tokenů
Stručně řečeno, když používáte zabezpečení zpráv, primární přihlašovací údaje se vždy používají k zabezpečení zprávy (například certifikát X.509 nebo lístek Kerberos).
Jak je definováno specifikací, vazba zabezpečení používá tokeny k zabezpečení výměny zpráv. Token je reprezentace přihlašovacích údajů zabezpečení.
Vazba zabezpečení používá k vytvoření podpisu primární token identifikovaný v zásadách vazby zabezpečení. Tento podpis se označuje jako podpis zprávy.
Další tokeny je možné zadat k rozšíření deklarací identity poskytnuté tokenem přidruženým k podpisu zprávy.
Endorsing, Signing, and Encrypting
Podpora přihlašovacích údajů vede k podpůrnému tokenu přenášeného uvnitř zprávy. Specifikace WS-SecurityPolicy definuje čtyři způsoby připojení podpůrného tokenu ke zprávě, jak je popsáno v následující tabulce.
Účel | Popis |
---|---|
Podepsané | Podpůrný token je součástí hlavičky zabezpečení a je podepsán podpisem zprávy. |
Schvalování | Podpis zprávy podepíše token pro koncového znaku. |
Podepsané a koncové | Podepsané, koncové tokeny podepisují celý ds:Signature prvek vytvořený z podpisu zprávy a jsou podepsány podpisem zprávy. To znamená, že oba tokeny (token použitý pro podpis zprávy a podepsaný token pro podpis zprávy) se navzájem podepisují. |
Podepsané a šifrované | Podepsané, šifrované podpůrné tokeny jsou podepsány podpůrné tokeny, které jsou také zašifrovány při jejich zobrazení v wsse:SecurityHeader souboru . |
Programování podpůrných přihlašovacích údajů
Pokud chcete vytvořit službu, která používá podpůrné tokeny, musíte vytvořit vlastní vazbu>.< (Další informace najdete v tématu Postupy: Vytvoření vlastní vazby pomocí SecurityBindingElement.)
Prvním krokem při vytváření vlastní vazby je vytvoření elementu vazby zabezpečení, který může být jedním ze tří typů:
Všechny třídy dědí z objektu SecurityBindingElement, který zahrnuje čtyři relevantní vlastnosti:
Rozsahy
Existují dva obory pro podporu přihlašovacích údajů:
Koncové body podporující tokeny podporují všechny operace koncového bodu. To znamená, že přihlašovací údaje, které podpůrný token představuje, lze použít při každém vyvolání operací koncového bodu.
Operace podporující tokeny podporují pouze konkrétní operaci koncového bodu.
Jak je uvedeno v názvech vlastností, můžou být podpůrné přihlašovací údaje povinné nebo volitelné. To znamená, že pokud se podpůrné přihlašovací údaje použijí, pokud jsou k dispozici, i když to není nutné, ale ověřování nebude neúspěšné, pokud není k dispozici.
Procedury
Vytvoření vlastní vazby, která zahrnuje podpůrné přihlašovací údaje
Vytvořte prvek vazby zabezpečení. Následující příklad vytvoří SymmetricSecurityBindingElement režim
UserNameForCertificate
ověřování. Použijte metodu CreateUserNameForCertificateBindingElement.Přidejte podpůrný parametr do kolekce typů vrácených příslušnou vlastností (
Endorsing
,Signed
,SignedEncrypted
, neboSignedEndorsed
). Typy v System.ServiceModel.Security.Tokens oboru názvů zahrnují běžně používané typy, například X509SecurityTokenParameters.
Příklad
Popis
Následující příklad vytvoří instanci SymmetricSecurityBindingElement a přidá instanci KerberosSecurityTokenParameters třídy do kolekce Endorsing vlastnost vrácená.
Kód
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);
}