Scénarios non pris en chargeUnsupported Scenarios

Pour différentes raisons, Windows Communication Foundation (WCF) ne prend pas en charge certains scénarios de sécurité spécifiques.For various reasons, Windows Communication Foundation (WCF) does not support some specific security scenarios. Par exemple, Windows XPWindows XP l’édition personnelle n’implémente pas les protocoles d’authentification SSPI ou Kerberos, et par conséquent, WCF ne prend pas en charge l’exécution d’un service avec l’authentification Windows sur cette plateforme.For example, Windows XPWindows XP Home Edition does not implement the SSPI or Kerberos authentication protocols, and therefore WCF does not support running a service with Windows authentication on that platform. D’autres mécanismes d’authentification, tels que le nom d’utilisateur/mot de passe et l’authentification intégrée HTTP/HTTPs, sont pris en charge lors de l’exécution de WCF sous Windows XP Édition personnelle.Other authentication mechanisms, such as username/password and HTTP/HTTPS integrated authentication are supported when running WCF under Windows XP Home Edition.

Emprunt d'identitéImpersonation Scenarios

Il se peut que l'identité empruntée ne fonctionne pas correctement lorsque des clients passent des appels asynchrones.Impersonated Identity Might Not Flow When Clients Make Asynchronous Calls

Lorsqu'un client WCF passe des appels asynchrones à un service WCF à l'aide de l'authentification Windows sous un emprunt d'identité, l'authentification peut se produire avec l'identité du processus client au lieu de l'identité empruntée.When a WCF client makes asynchronous calls to a WCF service using Windows authentication under impersonation, authentication might occur with the identity of the client process instead of the impersonated identity.

WCF ne prend pas en charge l’emprunt d' InvalidOperationException identité et une exception est levée lorsque les conditions suivantes sont réunies:WCF does not support impersonation and an InvalidOperationException is thrown when the following conditions exist:

  • Le système d'exploitation correspond à Windows XPWindows XP.The operating system is Windows XPWindows XP.

  • Le mode d'authentification aboutit à un identité Windows.The authentication mode results in a Windows identity.

  • La propriété Impersonation de l'objet OperationBehaviorAttribute a la valeur Required.The Impersonation property of the OperationBehaviorAttribute is set to Required.

  • Un jeton de contexte de sécurité basé sur l'état est créé (cette création est désactivée par défaut).A state-based security context token (SCT) is created (by default, creation is disabled).

Ce jeton peut uniquement être crée à l’aide d’une liaison personnalisée.The state-based SCT can only be created using a custom binding. Pour plus d’informations, consultez Guide pratique pour Créez un jeton de contexte de sécurité pour unesession sécurisée.) Dans le code, ce jeton est activé en créant un élément de liaison de sécurité (SymmetricSecurityBindingElement ou AsymmetricSecurityBindingElement) à l'aide de la méthode SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) ou SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) et en affectant au paramètre requireCancellation la valeur false.For more information, see How to: Create a Security Context Token for a Secure Session.) In code, the token is enabled by creating a security binding element (either SymmetricSecurityBindingElement or AsymmetricSecurityBindingElement) using the SecurityBindingElement.CreateSspiNegotiationBindingElement(Boolean) or the SecurityBindingElement.CreateSecureConversationBindingElement(SecurityBindingElement, Boolean) method and setting the requireCancellation parameter to false. Ce paramètre concerne la mise en cache du jeton.The parameter refers to the caching of the SCT. L'affectation de la valeur false à ce paramètre permet d'activer la fonctionnalité de jeton basé sur l'état.Setting the value to false enables the state-based SCT feature.

Sinon, dans la configuration, le jeton est activé en créant un <customBinding>, puis en ajoutant unsecurityélément < > et en affectant à l’attribut la requireSecurityContextCancellation authenticationMode valeur SecureConversation trueet à l’attribut la valeur.Alternatively, in configuration, the token is enabled by creating a <customBinding>, then adding a <security> element, and setting the authenticationMode attribute to SecureConversation and the requireSecurityContextCancellation attribute to true.

Notes

Les spécifications précédentes sont spécifiques.The preceding requirements are specific. Par exemple, l’élément CreateKerberosBindingElement crée un élément de liaison qui aboutit à une identité Windows, mais cet élément ne définit pas de jeton de contexte de sécurité avec état.For example, the CreateKerberosBindingElement creates a binding element that results in a Windows identity, but does not establish an SCT. Vous pouvez donc utiliser cet élément avec l'option Required de Windows XPWindows XP.Therefore, you can use it with the Required option on Windows XPWindows XP.

Éventuel conflit avec ASP.NETPossible ASP.NET Conflict

WCF et ASP.NET peuvent activer ou désactiver l’emprunt d’identité.WCF and ASP.NET can both enable or disable impersonation. Quand ASP.NET héberge une application WCF, il peut y avoir un conflit entre les paramètres de configuration WCF et ASP.NET.When ASP.NET hosts an WCF application, a conflict may exist between the WCF and ASP.NET configuration settings. En cas de conflit, le paramètre WCF est prioritaire, sauf si Impersonation la propriété a la NotAllowedvaleur, auquel cas le paramètre d’emprunt d’identité ASP.net est prioritaire.In case of conflict, the WCF setting takes precedence, unless the Impersonation property is set to NotAllowed, in which case the ASP.NET impersonation setting takes precedence.

Les chargements d'assembly risquent d'échouer lorsque l'emprunt d'identité est activéAssembly Loads May Fail Under Impersonation

Si le contexte emprunté ne dispose de droits d'accès permettant le chargement d'un assembly et que l'objet CLR tente pour la première fois de le charger pour AppDomain, AppDomain met l'échec en mémoire cache.If the impersonated context does not have access rights to load an assembly and if it is the first time the common language runtime (CLR) is attempting to load the assembly for that AppDomain, the AppDomain caches the failure. Les tentatives suivantes pour charger cet assembly échoueront également, même après restauration de l'emprunt d'identité et même si le contexte restauré dispose cette fois de droits d'accès permettant de charger cet assembly.Subsequent attempts to load that assembly (or assemblies) fail, even after reverting the impersonation, and even if the reverted context has access rights to load the assembly. Ces échecs successifs se produisent car l'objet CLR ne tente pas une nouvelle fois de charger l'assembly après la modification du contexte utilisateur.This is because the CLR does not re-attempt the load after the user context is changed. Vous devez redémarrer le domaine d'application pour résoudre ce problème.You must restart the application domain to recover from the failure.

Notes

La valeur par défaut de la propriété AllowedImpersonationLevel de la classe WindowsClientCredential est Identification.The default value for the AllowedImpersonationLevel property of the WindowsClientCredential class is Identification. Dans la plupart des cas, les contextes d'emprunt d'identité de niveau identification ne disposent pas de droits leur permettant de charger d'autres assemblys.In most cases, an identification-level impersonation context has no rights to load any additional assemblies. Il s'agit de la valeur par défaut. Il est donc important de garder à l'esprit ce cas très fréquent.This is the default value, so this is a very common condition to be aware of. L'emprunt d'identité de niveau identification se produit lorsque le processus d'emprunt ne dispose pas du droit SeImpersonate.Identification-level impersonation also occurs when the impersonating process does not have the SeImpersonate privilege. Pour plus d’informations, consultez délégation et emprunt d’identité.For more information, see Delegation and Impersonation.

La délégation nécessite la négociation des informations d'identificationDelegation Requires Credential Negotiation

Pour pouvoir utiliser le protocole d'authentification Kerberos avec la délégation, vous devez implémenter le protocole Kerberos en utilisant la négociation des informations d'identification (parfois appelé Kerberos multi-segment ou multi-étape).To use the Kerberos authentication protocol with delegation, you must implement the Kerberos protocol with credential negotiation (sometimes called multi-leg or multi-step Kerberos). Si vous implémentez l'authentification Kerberos sans négociation d'informations d'identification (parfois appelée Kerberos « one-shot » ou Kerberos « single-leg »), une exception est levée.If you implement Kerberos authentication without credential negotiation (sometimes called one-shot or single-leg Kerberos), an exception is thrown. Pour plus d’informations sur la façon d’implémenter la négociation des informations d’identification, consultez Débogage des Erreurs d’authentification Windows.For more information about how to implement credential negotiation, see Debugging Windows Authentication Errors.

ChiffrementCryptography

SHA-256 uniquement pris en charge lorsque des clés symétriques sont utiliséesSHA-256 Supported Only for Symmetric Key Usages

WCF prend en charge un large éventail d’algorithmes de création de chiffrement et de cryptage de signature que vous pouvez spécifier à l’aide de la suite d’algorithmes dans les liaisons fournies par le système.WCF supports a variety of encryption and signature digest creation algorithms that you can specify using the algorithm suite in the system-provided bindings. Pour une sécurité améliorée, WCF prend en charge les algorithmes SHA (Secure Hash Algorithm), plus particulièrement SHA-256, pour la création de hachages de chiffrement de signature.For improved security, WCF supports Secure Hash Algorithm (SHA) 2 algorithms, specifically SHA-256, for creating signature digest hashes. Cette mise en production prend uniquement en charge SHA-256 lorsque des clés symétriques, telles que les clés Kerberos sont utilisées et lorsque les messages ne sont pas signés par les certificats X.509.This release supports SHA-256 only for symmetric key usages, such as Kerberos keys, and where an X.509 certificate is not used to sign the message. WCF ne prend pas en charge les signatures RSA (utilisées dans les certificats X. 509) à l’aide du hachage SHA-256 en raison de l’absence de prise en charge actuelle de RSA-SHA256 dans WinFX.WCF does not support RSA signatures (used in X.509 certificates) using SHA-256 hash due to the current lack of support for RSA-SHA256 in the WinFX.

Hachage SHA-256 conforme FIPS non pris en chargeFIPS-Compliant SHA-256 Hashes not Supported

WCF ne prend pas en charge les hachages conformes à la norme FIPS SHA-256. par conséquent, les suites d’algorithmes qui utilisent SHA-256 ne sont pas prises en charge par WCF sur les systèmes où l’utilisation d’algorithmes compatibles FIPS est requise.WCF does not support SHA-256 FIPS-compliant hashes, so algorithm suites that use SHA-256 are not supported by WCF on systems where use of FIPS compliant algorithms is required.

Les algorithmes conformes FIPS risquent d'échouer si le registre est modifiéFIPS-Compliant Algorithms May Fail if Registry Is Edited

Vous pouvez activer ou désactiver les algorithmes conformes FIPS en utilisant les paramètres de sécurité locale de l'outil enfichable MMC.You can enable and disable Federal Information Processing Standards (FIPS)-compliant algorithms by using the Local Security Settings Microsoft Management Console (MMC) snap-in. Ces paramètres sont également accessibles à partir du registre.You can also access the setting in the registry. Notez, toutefois, que WCF ne prend pas en charge l’utilisation du Registre pour réinitialiser le paramètre.Note, however, that WCF does not support using the registry to reset the setting. Si vous affectez à ces paramètres une valeur autre que 1 ou 0, cela risque de générer des résultats incohérents entre CLR et le système d'exploitation.If the value is set to anything other than 1 or 0, inconsistent results can occur between the CLR and the operating system.

Limites d'utilisation concernant le chiffrement AES conforme FIPSFIPS-Compliant AES Encryption Limitation

Le chiffrement AES conforme FIPS n'est pas compatible avec les rappels duplex dans le cadre des emprunts d'identité de niveau identification.FIPS compliant AES encryption does not work in duplex callbacks under identification level impersonation.

Certificats CNG/KSPCNG/KSP Certificates

API de chiffrement: La nouvelle génération (CNG ) est le remplacement à long terme de l’CryptoAPI.Cryptography API: Next Generation (CNG) is the long-term replacement for the CryptoAPI. Cette API est disponible dans du code non managé sur Windows VistaWindows Vista, Windows Server 2008Windows Server 2008 et versions ultérieures de Windows.This API is available in unmanaged code on Windows VistaWindows Vista, Windows Server 2008Windows Server 2008 and later Windows versions.

.NET Framework 4.6.1 et les versions antérieures ne prennent pas en charge ces certificats, car ils utilisent le CryptoAPI hérité pour gérer les certificats CNG/KSP..NET Framework 4.6.1 and earlier versions do not support these certificates because they use the legacy CryptoAPI to handle CNG/KSP certificates. L’utilisation de ces certificats avec .NET Framework 4.6.1 et les versions antérieures lève une exception.The use of these certificates with .NET Framework 4.6.1 and earlier versions will cause an exception.

Pour indiquer si un certificat utilise KSP, deux méthodes sont possibles :There are two possible ways to tell if a certificate uses KSP:

  • Exécutez p/invoke de CertGetCertificateContextProperty et inspectez dwProvType sur la CertGetCertificateContextProperty retournée.Do a p/invoke of CertGetCertificateContextProperty, and inspect dwProvType on the returned CertGetCertificateContextProperty.

  • Utilisez la certutil commande à partir de la ligne de commande pour interroger des certificats.Use the certutil command from the command line for querying certificates. Pour plus d’informations, consultez tâches certutil pour le dépannage des certificats.For more information, see Certutil tasks for troubleshooting certificates.

La sécurité de message échouera si l'emprunt d'identité ASP.NET est utilisé et si la compatibilité ASP.NET est requiseMessage Security Fails if Using ASP.NET Impersonation and ASP.NET Compatibility Is Required

WCF ne prend pas en charge la combinaison de paramètres suivante car ils peuvent empêcher l’authentification du client:WCF does not support the following combination of settings because they can prevent client authentication from occurring:

  • L’emprunt d’identité ASP.NET est activé.ASP.NET Impersonation is enabled. Cette opération s’effectue dans le fichier Web. config en affectant à impersonate truel’attributidentityde l’élément < > la valeur.This is done in the Web.config file by setting the impersonate attribute of the <identity> element to true.

  • Le mode de compatibilité ASP.net est activé en aspNetCompatibilityEnabled affectant à truel’attribut de l' <> serviceHostingEnvironment la valeur.ASP.NET compatibility mode is enabled by setting the aspNetCompatibilityEnabled attribute of the <serviceHostingEnvironment> to true.

  • Le mode de sécurité de niveau message est utilisé.Message mode security is used.

La solution consiste à désactiver le mode de compatibilité ASP.NET.The work-around is to turn off the ASP.NET compatibility mode. Ou, si le mode de compatibilité ASP.NET est requis, désactivez la fonctionnalité d’emprunt d’identité ASP.NET et utilisez plutôt l’emprunt d’identité fourni par WCF.Or, if the ASP.NET compatibility mode is required, disable the ASP.NET impersonation feature and use WCF-provided impersonation instead. Pour plus d’informations, consultez délégation et emprunt d’identité.For more information, see Delegation and Impersonation.

Échec d'adresse littérale IPv6IPv6 Literal Address Failure

Les demandes de sécurité échouent si le client et le service s'exécutent sur le même ordinateur et les adresses littérales IPv6 sont utilisées pour le service.Security requests fail when the client and service are on the same machine, and IPv6 literal addresses are used for the service.

L'utilisation d'adresses littérales IPv6 est possible à condition que le client et le service ne s'exécutent pas sur le même ordinateur.Literal IPv6 addresses work if the service and client are on different machines.

Échecs de récupération WSDL avec approbation fédéréeWSDL Retrieval Failures with Federated Trust

WCF requiert exactement un document WSDL pour chaque nœud de la chaîne d’approbation fédérée.WCF requires exactly one WSDL document for each node in the federated trust chain. Veillez à ne pas définir de boucle lors de la spécification des points de terminaison.Be careful not to set up a loop when specifying endpoints. Des boucles peuvent résulter de l'utilisation d'un téléchargement WSDL de chaînes d'approbation fédérée avec au moins deux liens dans le même document WSDL.One way in which loops can arise is using a WSDL download of federated trust chains with two or more links in the same WSDL document. Un scénario courant pouvant induire ce problème est un service fédéré où le serveur de jeton de sécurité et le service sont contenus dans le même ServiceHost.A common scenario that can produce this problem is a federated service where the Security Token Server and the service are contained inside the same ServiceHost.

Un service comportant les trois adresses de point de terminaison suivantes est un exemple illustrant cette situation :An example of this situation is a service with the following three endpoint addresses:

  • http://localhost/CalculatorService/service(le service)http://localhost/CalculatorService/service (the service)

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

  • http://localhost/CalculatorService/mex(le point de terminaison de métadonnées)http://localhost/CalculatorService/mex (the metadata endpoint)

Ce scénario lève une exception.This throws an exception.

Pour qu'il fonctionne, vous pouvez placer le point de terminaison issue_ticket ailleurs.You can make this scenario work by putting the issue_ticket endpoint elsewhere.

Risques de perte des attributs d'importation WSDLWSDL Import Attributes can be Lost

WCF perd la trace des attributs sur un élément <wst:Claims> dans un modèle RST lors de l'exécution d'une importation WSDL.WCF loses track of the attributes on a <wst:Claims> element in an RST template when doing a WSDL import. Cela se produit pendant une importation WSDL si vous spécifiez directement <Claims> dans WSFederationHttpBinding.Security.Message.TokenRequestParameters ou IssuedSecurityTokenRequestParameters.AdditionalRequestParameters au lieu d’utiliser directement les collections de types de revendication.This happens during a WSDL import if you specify <Claims> directly in WSFederationHttpBinding.Security.Message.TokenRequestParameters or IssuedSecurityTokenRequestParameters.AdditionalRequestParameters instead of using the claim type collections directly. Puisque l’importation perd les attributs, la liaison ne fait pas l’aller-retour correctement dans WSDL et est donc incorrecte du côté client.Since the import loses the attributes, the binding does not round trip properly through WSDL and hence is incorrect on the client side.

pour corriger cette situation, il convient de modifier directement la liaison sur le client après l’importation.The fix is to modify the binding directly on the client after doing the import.

Voir aussiSee also