Een referentietype selecteren
Referenties zijn de gegevens die WCF (Windows Communication Foundation) gebruikt om een geclaimde identiteit of mogelijkheden tot stand te brengen. Een paspoort is bijvoorbeeld een referentie waarmee een overheid problemen heeft om het burgerschap in een land of regio te bewijzen. In WCF kunnen referenties veel vormen aannemen, zoals tokens voor gebruikersnaam en X.509-certificaten. In dit onderwerp worden referenties besproken, hoe ze worden gebruikt in WCF en hoe u de juiste referentie voor uw toepassing selecteert.
In veel landen en regio's is een rijbewijs een voorbeeld van een referentie. Een licentie bevat gegevens die de identiteit en mogelijkheden van een persoon vertegenwoordigen. Het bevat bewijs van bezit in de vorm van het beeld van de bezitsbezitgever. De licentie wordt uitgegeven door een vertrouwde instantie, meestal een overheidsafdeling van licenties. De licentie is verzegeld en kan een hologram bevatten, waarin wordt aangegeven dat er niet met is geknoeid of vervalst.
Het presenteren van een referentie omvat het presenteren van zowel de gegevens als het bewijs van het bezit van de gegevens. WCF ondersteunt verschillende referentietypen op zowel het transport- als berichtbeveiligingsniveau. Denk bijvoorbeeld aan twee typen referenties die worden ondersteund in WCF: gebruikersnaam en (X.509)-certificaatreferenties.
Voor de gebruikersnaamreferentie vertegenwoordigt de gebruikersnaam de geclaimde identiteit en het wachtwoord geeft bewijs van bezit. De vertrouwde instantie in dit geval is het systeem dat de gebruikersnaam en het wachtwoord valideert.
Met een X.509-certificaatreferentie kunnen de onderwerpnaam, alternatieve naam van het onderwerp of specifieke velden in het certificaat worden gebruikt als claims van identiteit, terwijl andere velden, zoals de Valid From
en Valid To
velden, de geldigheid van het certificaat opgeven.
Typen transportreferenties
In de volgende tabel ziet u de mogelijke typen clientreferenties die kunnen worden gebruikt door een binding in de transportbeveiligingsmodus. Wanneer u een service maakt, stelt u de ClientCredentialType
eigenschap in op een van deze waarden om het type referentie op te geven dat de client moet leveren om te communiceren met uw service. U kunt de typen instellen in code- of configuratiebestanden.
Instelling | Beschrijving |
---|---|
Geen | Hiermee geeft u op dat de client geen referenties hoeft te presenteren. Dit vertaalt zich naar een anonieme client. |
Basis | Hiermee geeft u basisverificatie voor de client. Zie RFC2617: HTTP-verificatie: basis- en digestverificatie voor meer informatie. |
Digest | Hiermee geeft u digest-verificatie voor de client. Zie RFC2617: HTTP-verificatie: basis- en digestverificatie voor meer informatie. |
Ntlm | Hiermee geeft u NT LAN Manager -verificatie (NTLM) op. Dit wordt gebruikt wanneer u om een of andere reden geen Kerberos-verificatie kunt gebruiken. U kunt het gebruik ook uitschakelen als een terugval door de AllowNtlm eigenschap false in te stellen op , waardoor WCF een best effort kan doen om een uitzondering te genereren als NTLM wordt gebruikt. Houd er rekening mee dat het instellen van deze eigenschap mogelijk false niet verhindert dat NTLM-referenties via de kabel worden verzonden. |
Vensters | Hiermee geeft u Windows-verificatie op. Als u alleen het Kerberos-protocol in een Windows-domein wilt opgeven, stelt u de AllowNtlm eigenschap in op false (de standaardinstelling).true |
Certificaat | Voert clientverificatie uit met behulp van een X.509-certificaat. |
Wachtwoord | De gebruiker moet een gebruikersnaam en wachtwoord opgeven. Valideer de gebruikersnaam/het wachtwoordpaar met Windows-verificatie of een andere aangepaste oplossing. |
Typen berichtclientreferenties
In de volgende tabel ziet u de mogelijke referentietypen die u kunt gebruiken bij het maken van een toepassing die gebruikmaakt van berichtbeveiliging. U kunt deze waarden gebruiken in code- of configuratiebestanden.
Instelling | Beschrijving |
---|---|
Geen | Hiermee geeft u op dat de client geen referentie hoeft te presenteren. Dit vertaalt zich naar een anonieme client. |
Vensters | Hiermee kunnen SOAP-berichtenuitwisselingen plaatsvinden onder de beveiligingscontext die is ingesteld met een Windows-referentie. |
Username | Hiermee kan de service vereisen dat de client wordt geverifieerd met een gebruikersnaamreferentie. Houd er rekening mee dat WCF geen cryptografische bewerkingen met gebruikersnamen toestaat, zoals het genereren van een handtekening of het versleutelen van gegevens. WCF zorgt ervoor dat het transport wordt beveiligd bij het gebruik van gebruikersnaamreferenties. |
Certificaat | Hiermee kan de service vereisen dat de client wordt geverifieerd met behulp van een X.509-certificaat. |
Uitgegeven token | Een aangepast tokentype dat is geconfigureerd volgens een beveiligingsbeleid. Het standaardtokentype is Security Assertions Markup Language (SAML). Het token wordt uitgegeven door een beveiligde tokenservice. Zie Federatie- en uitgegeven tokens voor meer informatie. |
Onderhandelingsmodel van servicereferenties
Onderhandelen is het proces van het tot stand brengen van een vertrouwensrelatie tussen een klant en een service door referenties uit te wisselen. Het proces wordt iteratief uitgevoerd tussen de client en de service, zodat alleen de informatie wordt vrijgegeven die nodig is voor de volgende stap in het onderhandelingsproces. In de praktijk is het eindresultaat de levering van de referenties van een service aan de client die in volgende bewerkingen moet worden gebruikt.
Met één uitzondering onderhandelt de door het systeem geleverde bindingen in WCF automatisch over de servicereferentie bij gebruik van beveiliging op berichtniveau. (De uitzondering is de BasicHttpBinding, waarmee beveiliging niet standaard wordt ingeschakeld.) Als u dit gedrag wilt uitschakelen, raadpleegt u de NegotiateServiceCredential en NegotiateServiceCredential eigenschappen.
Notitie
Wanneer SSL-beveiliging wordt gebruikt met .NET Framework 3.5 en hoger, gebruikt een WCF-client zowel de tussenliggende certificaten in het certificaatarchief als de tussenliggende certificaten die tijdens SSL-onderhandeling zijn ontvangen om certificaatketenvalidatie uit te voeren op het certificaat van de service. .NET Framework 3.0 maakt alleen gebruik van de tussenliggende certificaten die zijn geïnstalleerd in het lokale certificaatarchief.
Out-of-Band-onderhandeling
Als automatische onderhandeling is uitgeschakeld, moet de servicereferentie worden ingericht bij de client voordat u berichten naar de service verzendt. Dit wordt ook wel out-of-band-inrichting genoemd. Als het opgegeven referentietype bijvoorbeeld een certificaat is en automatische onderhandeling is uitgeschakeld, moet de client contact opnemen met de service-eigenaar om het certificaat te ontvangen en te installeren op de computer waarop de clienttoepassing wordt uitgevoerd. Dit kan bijvoorbeeld gebeuren wanneer u strikt wilt bepalen welke clients toegang hebben tot een service in een business-to-business-scenario. Deze out-of-band-onderhandeling kan via e-mail worden uitgevoerd en het X.509-certificaat wordt opgeslagen in het Windows-certificaatarchief, met behulp van een hulpprogramma zoals de module Microsoft Management Console (MMC)-certificaten.
Notitie
De ClientCredentials eigenschap wordt gebruikt om de service een certificaat te bieden dat is bereikt via out-of-band-onderhandeling. Dit is nodig bij het gebruik van de BasicHttpBinding klasse omdat de binding geen geautomatiseerde onderhandeling toestaat. De eigenschap wordt ook gebruikt in een niet-gerelateerd duplex-scenario. Dit is een scenario waarbij een server eerst een bericht naar de client verzendt zonder dat de client eerst een aanvraag naar de server moet verzenden. Omdat de server geen aanvraag van de client heeft, moet het certificaat van de client worden gebruikt om het bericht naar de client te versleutelen.
Referentiewaarden instellen
Nadat u een beveiligingsmodus hebt geselecteerd, moet u de werkelijke referenties opgeven. Als het referentietype bijvoorbeeld is ingesteld op 'certificaat', moet u een specifieke referentie (zoals een specifiek X.509-certificaat) koppelen aan de service of client.
Afhankelijk van of u een service of client programmeert, verschilt de methode voor het instellen van de referentiewaarde enigszins.
Servicereferenties instellen
Als u de transportmodus gebruikt en u HTTP als transport gebruikt, moet u Internet Information Services (IIS) gebruiken of de poort configureren met een certificaat. Zie transportbeveiligingsoverzicht en HTTP-transportbeveiliging voor meer informatie.
Als u een service met referenties in code wilt inrichten, maakt u een exemplaar van de ServiceHost klasse en geeft u de juiste referentie op met behulp van de ServiceCredentials klasse, die toegankelijk is via de Credentials eigenschap.
Een certificaat instellen
Als u een service wilt inrichten met een X.509-certificaat dat moet worden gebruikt om de service te verifiëren bij clients, gebruikt u de SetCertificate methode van de X509CertificateRecipientServiceCredential klasse.
Als u een service wilt inrichten met een clientcertificaat, gebruikt u de SetCertificate methode van de X509CertificateInitiatorServiceCredential klasse.
Windows-referenties instellen
Als de client een geldige gebruikersnaam en een geldig wachtwoord opgeeft, wordt die referentie gebruikt om de client te verifiëren. Anders worden de referenties van de huidige aangemelde gebruiker gebruikt.
Clientreferenties instellen
In WCF gebruiken clienttoepassingen een WCF-client om verbinding te maken met services. Elke client is afgeleid van de ClientBase<TChannel> klasse en de ClientCredentials eigenschap op de client staat de specificatie van verschillende waarden van clientreferenties toe.
Een certificaat instellen
Als u een service wilt inrichten met een X.509-certificaat dat wordt gebruikt om de client te verifiëren bij een service, gebruikt u de SetCertificate methode van de X509CertificateInitiatorClientCredential klasse.
Hoe clientreferenties worden gebruikt om een client te verifiëren bij de service
Clientreferentiegegevens die nodig zijn om met een service te communiceren, worden geleverd met behulp van de ClientCredentials eigenschap of de Credentials eigenschap. Het beveiligingskanaal gebruikt deze informatie om de client te verifiëren bij de service. Verificatie wordt uitgevoerd via een van de twee modi:
De clientreferenties worden eenmaal gebruikt voordat het eerste bericht wordt verzonden, met behulp van het WCF-clientexemplaren om een beveiligingscontext tot stand te brengen. Alle toepassingsberichten worden vervolgens beveiligd via de beveiligingscontext.
De clientreferenties worden gebruikt om elk toepassingsbericht te verifiëren dat naar de service wordt verzonden. In dit geval wordt er geen context tot stand gebracht tussen de client en de service.
Gevestigde identiteiten kunnen niet worden gewijzigd
Wanneer de eerste methode wordt gebruikt, wordt de tot stand gebrachte context permanent gekoppeld aan de clientidentiteit. Zodra de beveiligingscontext tot stand is gebracht, kan de identiteit die aan de client is gekoppeld, niet meer worden gewijzigd.
Belangrijk
Er is een situatie waar u rekening mee moet houden wanneer de identiteit niet kan worden gewijzigd (dat wil gezegd, wanneer de beveiligingscontext is ingesteld, het standaardgedrag). Als u een service maakt die communiceert met een tweede service, kan de identiteit die wordt gebruikt voor het openen van de WCF-client naar de tweede service, niet worden gewijzigd. Dit wordt een probleem als meerdere clients de eerste service mogen gebruiken en de service de clients nabootst bij het openen van de tweede service. Als de service dezelfde client opnieuw gebruikt voor alle bellers, worden alle aanroepen naar de tweede service uitgevoerd onder de identiteit van de eerste beller die is gebruikt om de client te openen naar de tweede service. Met andere woorden, de service gebruikt de identiteit van de eerste client voor alle clients om te communiceren met de tweede service. Dit kan leiden tot uitbreiding van bevoegdheden. Als dit niet het gewenste gedrag van uw service is, moet u elke beller bijhouden en een nieuwe client maken voor de tweede service voor elke afzonderlijke beller en ervoor zorgen dat de service alleen de juiste client gebruikt voor de juiste beller om met de tweede service te communiceren.
Zie Beveiligingsoverwegingen voor beveiligde sessies voor meer informatie over referenties en beveiligde sessies.
Zie ook
- System.ServiceModel.ClientBase<TChannel>
- ClientBase<TChannel>.ClientCredentials
- ClientCredentials.ClientCertificate
- BasicHttpMessageSecurity.ClientCredentialType
- HttpTransportSecurity.ClientCredentialType
- MessageSecurityOverHttp.ClientCredentialType
- MessageSecurityOverMsmq.ClientCredentialType
- MessageSecurityOverTcp.ClientCredentialType
- TcpTransportSecurity.ClientCredentialType
- X509CertificateInitiatorClientCredential.SetCertificate
- X509CertificateInitiatorServiceCredential.SetCertificate
- Beveiligingsconcepten
- Services en clients beveiligen
- WCF-beveiliging programmeren
- HTTP-transportbeveiliging