Procedure: Een ondersteunende referentie maken
Het is mogelijk om een aangepast beveiligingsschema te hebben waarvoor meer dan één referentie is vereist. Een service kan bijvoorbeeld vragen van de client, niet alleen een gebruikersnaam en wachtwoord, maar ook een referentie waarmee wordt aangetoond dat de client ouder is dan 18 jaar. De tweede referentie is een ondersteunende referentie. In dit onderwerp wordt uitgelegd hoe u dergelijke referenties implementeert in een WCF-client (Windows Communication Foundation).
Notitie
De specificatie voor ondersteunende referenties maakt deel uit van de WS-SecurityPolicy-specificatie. Zie Web Services-beveiligingsspecificaties voor meer informatie.
Ondersteunende tokens
Kortom, wanneer u berichtbeveiliging gebruikt, wordt altijd een primaire referentie gebruikt om het bericht te beveiligen (bijvoorbeeld een X.509-certificaat of een Kerberos-ticket).
Zoals gedefinieerd door de specificatie, gebruikt een beveiligingsbinding tokens om de berichtenuitwisseling te beveiligen. Een token is een weergave van een beveiligingsreferentie.
De beveiligingsbinding maakt gebruik van een primair token dat is geïdentificeerd in het beveiligingsbindingsbeleid om een handtekening te maken. Deze handtekening wordt de berichthandtekening genoemd.
Aanvullende tokens kunnen worden opgegeven om de claims die worden geleverd door het token dat is gekoppeld aan de berichthandtekening, te verbeteren.
Eindondertekening, ondertekening en versleuteling
Een ondersteunende referentie resulteert in een ondersteunend token dat in het bericht wordt verzonden. De WS-SecurityPolicy-specificatie definieert vier manieren om een ondersteunend token aan het bericht toe te voegen, zoals beschreven in de volgende tabel.
Doel | Beschrijving |
---|---|
Ondertekend | Het ondersteunende token is opgenomen in de beveiligingskoptekst en wordt ondertekend door de berichthandtekening. |
Onderschrijven | Een endorsing-token ondertekent de handtekening van het bericht. |
Ondertekende en eindondertekening | Ondertekend, tokens ondertekenen het hele ds:Signature element dat is geproduceerd uit de berichthandtekening en worden zelf ondertekend door die berichthandtekening. Dat wil gezegd, beide tokens (het token dat wordt gebruikt voor de berichthandtekening en het ondertekende token voor het ondertekenen van een token). |
Ondertekend en versleutelen | Ondertekende, versleutelde ondersteunende tokens zijn ondertekend met ondersteuningstokens die ook worden versleuteld wanneer ze worden weergegeven in de wsse:SecurityHeader . |
Ondersteunende referenties programmeren
Als u een service wilt maken die gebruikmaakt van ondersteunende tokens, moet u een <customBinding> maken. (Zie voor meer informatie Procedure: Een aangepaste binding maken met behulp van securityBindingElement.)
De eerste stap bij het maken van een aangepaste binding is het maken van een beveiligingsbindingselement. Dit kan een van de volgende drie typen zijn:
Alle klassen nemen over van de SecurityBindingElement, die vier relevante eigenschappen bevat:
Bereiken
Er zijn twee bereiken voor ondersteunende referenties:
Eindpuntondersteuningstokens ondersteunen alle bewerkingen van een eindpunt. Dat wil gezegd, de referentie die het ondersteunende token vertegenwoordigt, kan worden gebruikt wanneer eindpuntbewerkingen worden aangeroepen.
Ondersteunende bewerkingstokens ondersteunen alleen een specifieke eindpuntbewerking.
Zoals aangegeven door de eigenschapsnamen, kunnen ondersteunende referenties vereist of optioneel zijn. Als de ondersteunende referentie wordt gebruikt als deze aanwezig is, hoewel dit niet nodig is, maar de verificatie mislukt niet als deze niet aanwezig is.
Procedures
Een aangepaste binding maken die ondersteunende referenties bevat
Maak een beveiligingsbindingselement. In het onderstaande voorbeeld wordt een SymmetricSecurityBindingElement met de
UserNameForCertificate
verificatiemodus gemaakt. Gebruik de methode CreateUserNameForCertificateBindingElement.Voeg de ondersteunende parameter toe aan de verzameling typen die worden geretourneerd door de juiste eigenschap (
Endorsing
,SignedEncrypted
Signed
, of ).SignedEndorsed
De typen in de System.ServiceModel.Security.Tokens naamruimte bevatten veelgebruikte typen, zoals de X509SecurityTokenParameters.
Opmerking
Beschrijving
In het volgende voorbeeld wordt een exemplaar van de SymmetricSecurityBindingElement klasse gemaakt en wordt een exemplaar van de KerberosSecurityTokenParameters klasse toegevoegd aan de verzameling die door de eigenschap Endorsing wordt geretourneerd.
Code
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);
}