Delen via


Niet-ondersteunde scenario's

Om verschillende redenen biedt WCF (Windows Communication Foundation) geen ondersteuning voor bepaalde specifieke beveiligingsscenario's. Windows XP Home Edition implementeert bijvoorbeeld niet de SSPI- of Kerberos-verificatieprotocollen en daarom biedt WCF geen ondersteuning voor het uitvoeren van een service met Windows-verificatie op dat platform. Andere verificatiemechanismen, zoals gebruikersnaam/wachtwoord en geïntegreerde HTTP/HTTPS-verificatie, worden ondersteund bij het uitvoeren van WCF onder Windows XP Home Edition.

Imitatiescenario's

Geïmiteerde identiteit kan niet stromen wanneer clients asynchrone aanroepen maken

Wanneer een WCF-client asynchrone aanroepen naar een WCF-service uitvoert met behulp van Windows-verificatie onder imitatie, kan verificatie plaatsvinden met de identiteit van het clientproces in plaats van de geïmiteerde identiteit.

WCF biedt geen ondersteuning voor imitatie en er wordt een InvalidOperationException gegenereerd wanneer de volgende voorwaarden bestaan:

  • Het besturingssysteem is Windows XP.

  • De verificatiemodus resulteert in een Windows-identiteit.

  • De Impersonation eigenschap van de OperationBehaviorAttribute eigenschap is ingesteld op Required.

  • Er wordt een op status gebaseerde beveiligingscontexttoken (SCT) gemaakt (standaard is het maken uitgeschakeld).

De op status gebaseerde SCT kan alleen worden gemaakt met behulp van een aangepaste binding. Zie Voor meer informatie : Een beveiligingscontexttoken maken voor een beveiligde sessie.) In code wordt het token ingeschakeld door een beveiligingsbindingselement (of SymmetricSecurityBindingElement AsymmetricSecurityBindingElement) te maken met behulp van de SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) methode of de SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) methode en de requireCancellation parameter in te stellen op false. De parameter verwijst naar de cache van de SCT. Als u de waarde instelt om de sct-functie op basis van status in te false schakelen.

In de configuratie wordt het token ook ingeschakeld door een <customBinding>element te maken, vervolgens een <security> element toe te voegen en het authenticationMode kenmerk in te stellen op SecureConversation en het requireSecurityContextCancellation kenmerk op true.

Notitie

De voorgaande vereisten zijn specifiek. Het maakt bijvoorbeeld CreateKerberosBindingElement een bindingselement dat resulteert in een Windows-identiteit, maar geen SCT tot stand brengt. Daarom kunt u het gebruiken met de Required optie op Windows XP.

Mogelijk ASP.NET conflict

WCF en ASP.NET kunnen imitatie in- of uitschakelen. Wanneer ASP.NET als host fungeert voor een WCF-toepassing, kan er een conflict bestaan tussen de WCF- en ASP.NET configuratie-instellingen. In geval van conflict heeft de WCF-instelling voorrang, tenzij de Impersonation eigenschap is ingesteld op NotAllowed, in welk geval de ASP.NET imitatie-instelling voorrang heeft.

Assemblybelastingen kunnen mislukken onder imitatie

Als de geïmiteerde context geen toegangsrechten heeft om een assembly te laden en als dit de eerste keer is dat de Common Language Runtime (CLR) de assembly voor dat AppDomain probeert te laden, wordt de fout in de AppDomain cache opgeslagen. Volgende pogingen om die assembly (of assembly's) te laden mislukken, zelfs nadat de imitatie is teruggedraaid, en zelfs als de teruggedraaide context toegangsrechten heeft om de assembly te laden. Dit komt doordat de CLR de belasting niet opnieuw afhandelt nadat de gebruikerscontext is gewijzigd. U moet het toepassingsdomein opnieuw starten om te herstellen na de fout.

Notitie

De standaardwaarde voor de AllowedImpersonationLevel eigenschap van de WindowsClientCredential klasse is Identification. In de meeste gevallen heeft een imitatiecontext op identificatieniveau geen rechten om extra assembly's te laden. Dit is de standaardwaarde, dus dit is een veelvoorkomende voorwaarde waar u rekening mee moet houden. Imitatie op identificatieniveau treedt ook op wanneer het imitatieproces niet over de SeImpersonate bevoegdheid beschikt. Zie Delegatie en imitatie voor meer informatie.

Delegering vereist referentieonderhandeling

Als u het Kerberos-verificatieprotocol met delegatie wilt gebruiken, moet u het Kerberos-protocol implementeren met referentieonderhandeling (ook wel Kerberos met meerdere been of meerdere stappen genoemd). Als u Kerberos-verificatie implementeert zonder referentieonderhandeling (ook wel een-shot of Kerberos met één been genoemd), wordt er een uitzondering gegenereerd. Zie Fouten opsporen in Windows-verificatiefouten voor meer informatie over het implementeren van referentie-onderhandeling.

Cryptografie

SHA-256 wordt alleen ondersteund voor symmetrisch sleutelgebruik

WCF ondersteunt verschillende versleutelings- en handtekeningsamenvatingsalgoritmen die u kunt opgeven met behulp van de algoritmesuite in de door het systeem geleverde bindingen. Voor verbeterde beveiliging ondersteunt WCF 2-algoritmen (Secure Hash Algorithm) 2, met name SHA-256, voor het maken van hash-hashes voor handtekeningen. Deze release biedt alleen ondersteuning voor SHA-256 voor symmetrisch sleutelgebruik, zoals Kerberos-sleutels, en waarbij een X.509-certificaat niet wordt gebruikt om het bericht te ondertekenen. WCF biedt geen ondersteuning voor RSA-handtekeningen (gebruikt in X.509-certificaten) met sha-256-hash vanwege het huidige gebrek aan ondersteuning voor RSA-SHA256 in WinFX.

FIPS-compatibele SHA-256-hashes worden niet ondersteund

WCF biedt geen ondersteuning voor SHA-256 FIPS-compatibele hashes, dus algoritmesuites die gebruikmaken van SHA-256 worden niet ondersteund door WCF op systemen waar het gebruik van FIPS-compatibele algoritmen is vereist.

FIPS-compatibele algoritmen kunnen mislukken als het register wordt bewerkt

U kunt fips-compatibele algoritmen (Federal Information Processing Standards) in- en uitschakelen met behulp van de MMC-module (Local Security Settings Microsoft Management Console). U hebt ook toegang tot de instelling in het register. Houd er echter rekening mee dat WCF het gebruik van het register niet ondersteunt om de instelling opnieuw in te stellen. Als de waarde is ingesteld op iets anders dan 1 of 0, kunnen inconsistente resultaten optreden tussen de CLR en het besturingssysteem.

Beperking van FIPS-compatibele AES-versleuteling

FIPS-compatibele AES-versleuteling werkt niet in duplex callbacks onder imitatie op identificatieniveau.

CNG/KSP-certificaten

Cryptografie-API: Next Generation (CNG) is de langetermijnvervanging voor de CryptoAPI. Deze API is beschikbaar in onbeheerde code op Windows Vista, Windows Server 2008 en latere Windows-versies.

.NET Framework 4.6.1 en eerdere versies bieden geen ondersteuning voor deze certificaten omdat ze de verouderde CryptoAPI gebruiken om CNG/KSP-certificaten te verwerken. Het gebruik van deze certificaten met .NET Framework 4.6.1 en eerdere versies veroorzaakt een uitzondering.

Er zijn twee mogelijke manieren om te zien of een certificaat gebruikmaakt van KSP:

  • Doe een p/invoke van CertGetCertificateContextProperty, en inspecteer dwProvType op de geretourneerde CertGetCertificateContextProperty.

  • Gebruik de certutil opdracht vanaf de opdrachtregel voor het uitvoeren van query's op certificaten. Zie Certutil-taken voor het oplossen van problemen met certificaten voor meer informatie.

Berichtbeveiliging mislukt als het gebruik van ASP.NET imitatie en ASP.NET compatibiliteit is vereist

WCF biedt geen ondersteuning voor de volgende combinatie van instellingen, omdat deze kunnen voorkomen dat clientverificatie optreedt:

  • ASP.NET imitatie is ingeschakeld. Dit wordt gedaan in het Web.config-bestand door het impersonate kenmerk van het <identity> element in te stellen op true.

  • ASP.NET compatibiliteitsmodus is ingeschakeld door het aspNetCompatibilityEnabled kenmerk van de <serviceHostingEnvironment> in te stellen op true.

  • De beveiliging van de berichtenmodus wordt gebruikt.

Het werk is het uitschakelen van de ASP.NET compatibiliteitsmodus. Als de ASP.NET compatibiliteitsmodus is vereist, schakelt u de ASP.NET imitatiefunctie uit en gebruikt u in plaats daarvan wcF-opgegeven imitatie. Zie Delegatie en imitatie voor meer informatie.

Fout met letterlijk IPv6-adres

Beveiligingsaanvragen mislukken wanneer de client en service zich op dezelfde computer bevinden en letterlijke IPv6-adressen worden gebruikt voor de service.

Letterlijke IPv6-adressen werken als de service en client zich op verschillende computers bevinden.

WSDL-ophaalfouten met federatieve vertrouwensrelatie

WCF vereist precies één WSDL-document voor elk knooppunt in de federatieve vertrouwensketen. Wees voorzichtig met het instellen van een lus bij het opgeven van eindpunten. Een manier waarop lussen kunnen optreden, is het gebruik van een WSDL-download van federatieve vertrouwensketens met twee of meer koppelingen in hetzelfde WSDL-document. Een veelvoorkomend scenario dat dit probleem kan produceren, is een federatieve service waarbij de beveiligingstokenserver en de service zich in dezelfde ServiceHost bevinden.

Een voorbeeld van deze situatie is een service met de volgende drie eindpuntadressen:

  • http://localhost/CalculatorService/service (de service)

  • http://localhost/CalculatorService/issue_ticket (de STS)

  • http://localhost/CalculatorService/mex (het eindpunt voor metagegevens)

Dit genereert een uitzondering.

U kunt dit scenario laten werken door het issue_ticket eindpunt ergens anders te plaatsen.

WSDL-importkenmerken kunnen verloren gaan

WCF verliest het bijhouden van de kenmerken op een <wst:Claims> element in een RST sjabloon bij het uitvoeren van een WSDL-import. Dit gebeurt tijdens een WSDL-import als u rechtstreeks in WSFederationHttpBinding.Security.Message.TokenRequestParameters of IssuedSecurityTokenRequestParameters.AdditionalRequestParameters in plaats van de claimtypeverzamelingen rechtstreeks opgeeft<Claims>. Omdat het importeren de kenmerken verliest, wordt de binding niet correct via WSDL afgerond en is deze dus onjuist aan de clientzijde.

De oplossing is om de binding rechtstreeks op de client te wijzigen na het importeren.

Zie ook