Delen via


Compatibiliteit van gedeeltelijke vertrouwensfuncties

Windows Communication Foundation (WCF) ondersteunt een beperkte subset van functionaliteit wanneer deze wordt uitgevoerd in een gedeeltelijk vertrouwde omgeving. De functies die worden ondersteund in gedeeltelijke vertrouwensrelatie, zijn ontworpen rond een specifieke set scenario's, zoals beschreven in het onderwerp Ondersteunde implementatiescenario's .

Minimale machtigingsvereisten

WCF ondersteunt een subset van functies in toepassingen die worden uitgevoerd onder een van de volgende standaard benoemde machtigingensets:

  • Gemiddeld vertrouwensmachtigingen

  • Machtigingen voor internetzone

Als u WCF probeert te gebruiken in gedeeltelijk vertrouwde toepassingen met meer beperkende machtigingen, kan dit leiden tot beveiligingsuitzonderingen tijdens runtime.

Contracten

Contracten zijn onderhevig aan de volgende beperkingen wanneer ze worden uitgevoerd onder gedeeltelijke vertrouwensrelatie:

  • De serviceklasse die de [ServiceContract] interface implementeert, moet een constructor zijn public en hebben public . Als er methoden worden gedefinieerd [OperationContract] , moeten deze zijn public. Als in plaats daarvan een [ServiceContract] interface wordt geïmplementeerd, kunnen deze methode-implementaties expliciet zijn of private, mits de [ServiceContract] interface is public.

  • Wanneer u het [ServiceKnownType] kenmerk gebruikt, moet de opgegeven methode zijn public.

  • [MessageContract] klassen en hun leden kunnen zijn public. Als de [MessageContract] klasse is gedefinieerd in de toepassingsassembly, kan dit zijn internal en leden hebben internal .

Door het systeem geleverde bindingen

De BasicHttpBinding en WebHttpBinding worden volledig ondersteund in een gedeeltelijke vertrouwensomgeving. De WSHttpBinding functie wordt alleen ondersteund voor de transportbeveiligingsmodus.

Bindingen die andere transporten dan HTTP gebruiken, zoals de NetTcpBinding, de NetNamedPipeBinding, of de NetMsmqBinding, worden niet ondersteund wanneer ze worden uitgevoerd in een gedeeltelijke vertrouwensomgeving.

Aangepaste bindingen

Aangepaste bindingen kunnen worden gemaakt en gebruikt in een gedeeltelijke vertrouwensomgeving, maar moeten voldoen aan de beperkingen die zijn opgegeven in deze sectie.

Transporten

De enige toegestane transportbindingselementen zijn HttpTransportBindingElement en HttpsTransportBindingElement.

Encoders

De volgende encoders zijn toegestaan:

De MTOM-coderingsprogramma's (Message Transmission Optimization Mechanism) worden niet ondersteund.

Beveiliging

Gedeeltelijk vertrouwde toepassingen kunnen gebruikmaken van de beveiligingsfuncties op transportniveau van WCF voor het beveiligen van hun communicatie. Beveiliging op berichtniveau wordt niet ondersteund. Het configureren van een binding voor het gebruik van beveiliging op berichtniveau resulteert in een uitzondering tijdens runtime.

Niet-ondersteunde bindingen

Bindingen die gebruikmaken van betrouwbare berichten, transacties of beveiliging op berichtniveau, worden niet ondersteund.

Serialisatie

Zowel de DataContractSerializer als de XmlSerializer worden ondersteund in een gedeeltelijke vertrouwensomgeving. Het gebruik van de toepassing DataContractSerializer is echter onderhevig aan de volgende voorwaarden:

  • Alle serialiseerbare [DataContract] typen moeten zijn public.

  • Alle serialiseerbare [DataMember] velden of eigenschappen in een [DataContract] type moeten openbaar en lezen/schrijven zijn. De serialisatie en deserialisatie van velden wordt niet ondersteund bij het uitvoeren van readonly WCF in een gedeeltelijk vertrouwde toepassing.

  • Het [Serializable]programmeermodel /ISerializable wordt niet ondersteund in een gedeeltelijke vertrouwensomgeving.

  • Bekende typen moeten worden opgegeven in de configuratie op code- of machineniveau (machine.config). Bekende typen kunnen om veiligheidsredenen niet worden opgegeven in de configuratie op toepassingsniveau.

  • Typen die een uitzondering implementeren IObjectReference in een gedeeltelijk vertrouwde omgeving.

Zie de sectie Serialisatie in De aanbevolen procedures voor gedeeltelijke vertrouwensrelaties voor meer informatie over beveiliging bij veilig gebruik DataContractSerializer in een gedeeltelijk vertrouwde toepassing.

Verzamelingstypen

Sommige verzamelingstypen implementeren zowel IEnumerable<T> als IEnumerable. Voorbeelden zijn typen die worden geïmplementeerd ICollection<T>. Dergelijke typen kunnen een public implementatie van GetEnumerator()en een expliciete implementatie van GetEnumerator(). In dit geval DataContractSerializer roept u de public implementatie aan van GetEnumerator()en niet de expliciete implementatie van GetEnumerator(). Als geen van de GetEnumerator() implementaties en alle implementaties expliciete implementaties zijnpublic, roept u IEnumerable.GetEnumerator()het aanDataContractSerializer.

Voor verzamelingstypen wanneer WCF wordt uitgevoerd in een gedeeltelijke vertrouwensomgeving, als geen van de implementaties of publicgeen van deze GetEnumerator() implementaties expliciete interface-implementaties zijn, wordt er een beveiligingsuitzondering gegenereerd.

NetDataContractSerializer

Veel .NET Framework-verzamelingstypen, zoals List<T>, ArrayListDictionary<TKey,TValue> en Hashtable worden niet ondersteund door de NetDataContractSerializer in gedeeltelijke vertrouwensrelatie. Deze typen hebben de [Serializable] kenmerkset en zoals eerder vermeld in de sectie Serialisatie, wordt dit kenmerk niet ondersteund in gedeeltelijke vertrouwensrelatie. De DataContractSerializer verzamelingen worden op een speciale manier behandeld en kunnen deze beperking dus omzeilen, maar het NetDataContractSerializer heeft geen dergelijk mechanisme om deze beperking te omzeilen.

Het DateTimeOffset type wordt niet ondersteund door de NetDataContractSerializer in gedeeltelijke vertrouwensrelatie.

Een surrogaat kan niet worden gebruikt met het NetDataContractSerializer (met behulp van het SurrogateSelector mechanisme) bij het uitvoeren in gedeeltelijke vertrouwensrelatie. Houd er rekening mee dat deze beperking van toepassing is op het gebruik van een surrogaat, niet op het serialiseren ervan.

Veelvoorkomend gedrag inschakelen om uit te voeren

Service- of eindpuntgedrag dat niet is gemarkeerd met het AllowPartiallyTrustedCallersAttribute kenmerk (APTCA) dat wordt toegevoegd aan de <commonBehaviors-sectie> van een configuratiebestand, wordt niet uitgevoerd wanneer de toepassing wordt uitgevoerd in een gedeeltelijke vertrouwensomgeving en er geen uitzondering wordt gegenereerd wanneer dit gebeurt. Als u het uitvoeren van veelvoorkomend gedrag wilt afdwingen, moet u een van de volgende opties uitvoeren:

  • Markeer uw algemene gedrag met het AllowPartiallyTrustedCallersAttribute kenmerk, zodat het kan worden uitgevoerd wanneer deze wordt geïmplementeerd als een gedeeltelijke vertrouwenstoepassing. Houd er rekening mee dat een registervermelding kan worden ingesteld op de computer om te voorkomen dat APTCA-gemarkeerde assembly's worden uitgevoerd. .

  • Zorg ervoor dat als de toepassing is geïmplementeerd als een volledig vertrouwde toepassing die gebruikers de beveiligingsinstellingen voor codetoegang niet kunnen wijzigen om de toepassing uit te voeren in een gedeeltelijke vertrouwensomgeving. Als ze dit kunnen doen, wordt het gedrag niet uitgevoerd en wordt er geen uitzondering gegenereerd. Als u dit wilt controleren, raadpleegt u de levelfinal-optie met behulp van Caspol.exe (Hulpprogramma voor beveiligingsbeleid voor codetoegang).a0>

Zie Procedure voor een voorbeeld van een veelvoorkomend gedrag: Eindpunten vergrendelen in de onderneming.

Configuratie

Met één uitzondering kan gedeeltelijk vertrouwde code alleen WCF-configuratiesecties in het lokale app.config bestand laden. Als u WCF-configuratiesecties wilt laden die verwijzen naar WCF-secties in machine.config of in een root web.config-bestand, is ConfigurationPermission (Onbeperkt) vereist. Zonder deze machtiging leidt verwijzingen naar WCF-configuratiesecties (gedrag, bindingen) buiten het lokale configuratiebestand tot een uitzondering wanneer de configuratie wordt geladen.

De enige uitzondering is een bekende configuratie voor serialisatie, zoals beschreven in de sectie Serialisatie van dit onderwerp.

Belangrijk

Configuratie-extensies worden alleen ondersteund wanneer deze worden uitgevoerd onder Volledig vertrouwen.

Diagnostiek

Gebeurtenisregistratie

Logboekregistratie van beperkte gebeurtenissen wordt ondersteund onder gedeeltelijke vertrouwensrelatie. Alleen serviceactiveringsfouten en tracerings-/berichtlogboekfouten worden vastgelegd in het gebeurtenislogboek. Het maximum aantal gebeurtenissen dat door een proces kan worden geregistreerd, is 5, om te voorkomen dat overmatige berichten naar het gebeurtenislogboek worden geschreven.

Logboekregistratie van berichten

Logboekregistratie van berichten werkt niet wanneer WCF wordt uitgevoerd in een gedeeltelijke vertrouwensomgeving. Als deze optie is ingeschakeld onder gedeeltelijke vertrouwensrelatie, mislukt de activering van de service niet, maar wordt er geen bericht geregistreerd.

Tracering

Beperkte traceringsfunctionaliteit is beschikbaar wanneer deze wordt uitgevoerd in een gedeeltelijke vertrouwensomgeving. In het <listeners> element in het configuratiebestand zijn en de nieuwe EventSchemaTraceListenertypen de enige typen die u kunt toevoegenTextWriterTraceListener. Het gebruik van de standaard XmlWriterTraceListener kan leiden tot onvolledige of onjuiste logboeken.

Ondersteunde traceringsbronnen zijn:

De volgende traceringsbronnen worden niet ondersteund:

De volgende leden van de TraceOptions opsomming mogen niet worden opgegeven:

Wanneer u tracering gebruikt in een gedeeltelijke vertrouwensomgeving, moet u ervoor zorgen dat de toepassing voldoende machtigingen heeft om de uitvoer van de traceringslistener op te slaan. Wanneer u bijvoorbeeld de TextWriterTraceListener traceringsuitvoer naar een tekstbestand gebruikt, moet u ervoor zorgen dat de toepassing over de benodigde FileIOPermission beschikt om naar het traceringsbestand te schrijven.

Notitie

Om te voorkomen dat de traceringsbestanden met dubbele fouten worden overspoeld, schakelt WCF tracering van de resource of actie uit na de eerste beveiligingsfout. Er is één uitzonderingstracering voor elke mislukte resourcetoegang, de eerste keer dat er een poging wordt gedaan om toegang te krijgen tot de resource of de actie uit te voeren.

WCF-servicehost

WcF-servicehost biedt geen ondersteuning voor gedeeltelijke vertrouwensrelatie. Als u een WCF-service in gedeeltelijke vertrouwensrelatie wilt gebruiken, gebruikt u de WCF Service Library Project-sjabloon niet in Visual Studio om uw service te bouwen. Maak in plaats daarvan een nieuwe website in Visual Studio door de wcF-servicewebsitesjabloon te kiezen, die de service kan hosten op een webserver waarop WCF gedeeltelijke vertrouwensrelatie wordt ondersteund.

Andere beperkingen

WCF is over het algemeen beperkt tot de beveiligingsoverwegingen die worden opgelegd door de hostingtoepassing. Als WCF bijvoorbeeld wordt gehost in een XAML-browsertoepassing (XBAP), is deze onderhevig aan XBAP-beperkingen, zoals beschreven in de gedeeltelijke vertrouwensbeveiliging van Windows Presentation Foundation.

De volgende extra functies zijn niet ingeschakeld bij het uitvoerenvan2 in een gedeeltelijke vertrouwensomgeving:

  • Windows Management Instrumentation (WMI)

  • Logboekregistratie van gebeurtenissen is slechts gedeeltelijk ingeschakeld (zie de discussie in de sectie Diagnostische gegevens ).

  • Prestatiemeteritems

Het gebruik van WCF-functies die niet worden ondersteund in een gedeeltelijke vertrouwensomgeving, kan leiden tot uitzonderingen tijdens runtime.

Niet-vermelde functies

De beste manier om te ontdekken dat een stukje informatie of actie niet beschikbaar is bij het uitvoeren in een gedeeltelijke vertrouwensomgeving is om toegang te krijgen tot de resource of de actie in een try blok uit te voeren en vervolgens catch de fout. Om te voorkomen dat de traceringsbestanden met dubbele fouten worden overspoeld, schakelt WCF tracering van de resource of actie uit na de eerste beveiligingsfout. Er is één uitzonderingstracering voor elke mislukte resourcetoegang, de eerste keer dat er een poging wordt gedaan om toegang te krijgen tot de resource of de actie uit te voeren.

Zie ook