L’ID d’événement : 0 peut être connecté lorsque vous configurez un service Web basé sur les Web Services Enhancements 3.0 pour utiliser une conversation sécurisée : « erreur lors du traitement d’une réponse fautive sortante »


Symptômes


Envisagez le scénario suivant. Vous configurez Microsoft Web Services Enhancements 3.0 (WSE 3.0)-en fonction du service Web pour utiliser une conversation sécurisée. Vous configurez le pool d’applications dans les Services Internet (IIS) pour utiliser un compte utilisateur personnalisé pour exécuter le service Web. Dans ce scénario, les événements d’erreur suivants peuvent être enregistrés :
Événement 1
Événement 2
Remarque Dans ces situations, le mot « s’est produite » est une faute d’orthographe pour le mot « s’est produite. »

Cause


Par défaut, WSE 3.0 utilise l’objet SecurityContextToken dynamique si vous configurez le service Web pour utiliser une conversation sécurisée en affectant trueà la propriété EstablishSecurityContext de la stratégie. WSE 3.0 utilise l’API de Protection des données (DPAPI) pour l’état de l’objet SecurityContextToken de coder et décoder l’état de l’objet SecurityContextToken . Ou bien, WSE 3.0 utilise DPAPI pour coder le cookie de l’objet SecurityContextToken et décoder le cookie de l’objet SecurityContextToken . Ce problème se produit parce que WSE 3.0 ne peut pas appeler la DPAPI si le profil utilisateur de l’identité de pool d’applications n’est pas chargé.

Solution de contournement


Pour contourner ce problème, appliquez l’une des méthodes suivantes.

Méthode 1

Configurer l’identité du pool d’application pour s’exécuter sous un compte d’utilisateur dont le profil d’utilisateur est déjà chargé. Par exemple, configurer l’identité de pool d’applications à exécuter sous le compte Service réseau.

Méthode 2

Charger manuellement le profil utilisateur de l’identité de pool d’applications. Pour ce faire, utilisez une des méthodes suivantes.

Méthode A

Procédez comme suit :
  1. Utiliser un compte d’utilisateur pour ouvrir une session sur l’ordinateur et ensuite, ne modifiez pas le compte d’utilisateur.
  2. Sous ce compte d’utilisateur, créer un service de Microsoft Windows, ou d’exécuter un service Windows.
  3. Configurer le service Windows afin que le compte d’utilisateur peut interagir avec le bureau.

Méthode B

Pour charger le profil utilisateur, appelez la fonction LoadUserProfile .

Méthode 3

Désactiver l’objet SecurityContextToken dynamique du service Web en configurant l’élément statefulSecurityContextToken . Par exemple, vous pouvez utiliser le fichier de configuration d’application qui contient le code suivant pour désactiver les jetons de sécurité avec état.
<tokenIssuer>     <statefulSecurityContextToken enabled="false"/>   </tokenIssuer>

Méthode 4

Pour configurer le service Web pour utiliser une conversation sécurisée, utilisez un X509 de certificats, ou utilisez un autre type de jeton de sécurité au lieu d’utiliser la mise en oeuvre de la DPAPI par défaut. Pour ce faire, configurez l’élément serviceToken dans le fichier de configuration de chaque serveur Web. Par exemple, le code suivant configure le service Web pour utiliser un X509 certificat au lieu d’utiliser la mise en oeuvre de la DPAPI par défaut.
<microsoft.web.services3>    <tokenIssuer>      <statefulSecurityContextToken enabled="true"/>      <serviceToken>        <add>          <KeyInfo>            <wsse:SecurityTokenReference xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">              <wsse:KeyIdentifier ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509SubjectKeyIdentifier">bBwPfItvKp3b6TNDq+14qs58VJQ=</wsse:KeyIdentifier>            </wsse:SecurityTokenReference>          </KeyInfo>        </add>      </serviceToken>    </tokenIssuer>  </microsoft.web.services3>

Statut


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.

Informations supplémentaires


Lorsque vous envoyez un message SOAP, l’objet SecurityContextToken avec état est sérialisé avec une clé qui peut être récupérée que par le service Web. En revanche, la clé chiffrée de l’objet sans état de SecurityContextToken est mis en cache par le client et par le service Web. Par conséquent, une chaîne unique qui représente le jeton de sécurité SecurityContext mises en cache doit être envoyée dans le message SOAP. Quand les caches sont disponibles, aucun problème ne se produit. Si vous utilisez l’objet SecurityContextToken sans état, et si le domaine d’application qui héberge le service Web est réinitialisé, les caches sont détruits. Par conséquent, se produit une erreur SOAP. Remarque Certains analyseurs antivirus peuvent entraîner le domaine d’application à réinitialiser.

Procédure pour reproduire le problème

  1. Ouvrez l’exemple de Quickstart de Conversation sécurisée WSE 3.0. Par défaut, cet exemple est à l’emplacement suivant :
    drive:\Program Files\Microsoft WSE\v3.0\Samples\CS\QuickStart\Security\SecureConversation\Policy
  2. Configurer un pool d’applications pour utiliser un compte utilisateur personnalisé pour exécuter le service Web dans cet exemple. Le profil utilisateur de l’identité de pool d’applications n’est pas encore chargé.
  3. Exécutez l’exemple Quickstart de Conversation sécurisée WSE 3.0.

Références


Pour plus d’informations sur la résolution de la DPAPI, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
309408 comment résoudre les problèmes liés à l’API de Protection des données (DPAPI)
Pour plus d’informations sur la protection des données Windows, visitez le site Web de Microsoft Developer Network (MSDN) à l’adresse suivante :Pour plus d’informations sur la fonction LoadUserProfile , visitez le site Web MSDN suivant :