Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les informations d’identification sont les données que Windows Communication Foundation (WCF) utilise pour établir une identité ou des fonctionnalités revendiquées. Par exemple, un passeport est un justificatif qu’un gouvernement émet pour prouver la citoyenneté dans un pays ou une région. Dans WCF, les informations d’identification peuvent prendre de nombreuses formes, telles que les jetons de nom d’utilisateur et les certificats X.509. Cette rubrique décrit les informations d’identification, la façon dont elles sont utilisées dans WCF et comment sélectionner les informations d’identification appropriées pour votre application.
Dans de nombreux pays et régions, le permis de conduire est un exemple de justificatif. Une licence contient des données qui représentent l’identité et les fonctionnalités d’une personne. Il contient une preuve de possession sous la forme de l’image du possesseur. La licence est émise par une autorité approuvée, généralement un service gouvernemental de licences. La licence est scellée et peut contenir un hologramme, indiquant qu'elle n'a pas été falsifiée ou contrefaite.
La présentation d’informations d’identification implique la présentation des données et la preuve de possession des données. WCF prend en charge divers types de justificatifs aux niveaux de sécurité du transport et des messages. Par exemple, considérez deux types d’informations d’identification prises en charge dans WCF : nom d’utilisateur et informations d’identification de certificat (X.509).
Pour les informations d’identification du nom d’utilisateur, le nom d’utilisateur représente l’identité revendiquée et le mot de passe fournit une preuve de possession. L’autorité approuvée dans ce cas est le système qui valide le nom d’utilisateur et le mot de passe.
Avec des informations d’identification de certificat X.509, le nom du sujet, le nom alternatif du sujet ou des champs spécifiques dans le certificat peuvent être utilisés comme réclamations d’identité, tandis que d’autres champs, tels que les champs Valid From
et Valid To
, spécifient la validité du certificat.
Types de justificatifs de transport
Le tableau suivant affiche les types possibles d’informations d’identification du client qui peuvent être utilisés par une liaison en mode de sécurité de transport. Lors de la création d’un service, définissez la ClientCredentialType
propriété sur l’une de ces valeurs pour spécifier le type d’informations d’identification que le client doit fournir pour communiquer avec votre service. Vous pouvez définir les types dans des fichiers de code ou de configuration.
Réglage | Descriptif |
---|---|
Aucun | Spécifie que le client n’a pas besoin de présenter d’informations d’identification. Cela se traduit par un client anonyme. |
Élémentaire | Spécifie l’authentification de base pour le client. Pour plus d’informations, consultez RFC2617 : Authentification HTTP : Authentification de base et Digest. |
Résumé | Spécifie l’authentification Digest pour le client. Pour plus d’informations, consultez RFC2617 : Authentification HTTP : Authentification de base et Digest. |
Ntlm | Spécifie l’authentification NT LAN Manager (NTLM). Cela est utilisé lorsque vous ne pouvez pas utiliser l’authentification Kerberos pour une raison quelconque. Vous pouvez également désactiver son utilisation en tant que solution de repli en définissant la propriété AllowNtlm sur false , ce qui fait que WCF tente de lever une exception si NTLM est utilisé. Notez que la définition de cette propriété false peut ne pas empêcher l’envoi d’informations d’identification NTLM sur le câble. |
Fenêtres | Spécifie l’authentification Windows. Pour spécifier uniquement le protocole Kerberos sur un domaine Windows, définissez la AllowNtlm propriété false sur (la valeur par défaut est true ). |
Certificat | Effectue l’authentification du client à l’aide d’un certificat X.509. |
Mot de passe | L’utilisateur doit fournir un nom d’utilisateur et un mot de passe. Validez la paire nom d’utilisateur/mot de passe à l’aide de l’authentification Windows ou d’une autre solution personnalisée. |
Types d'informations d'identification du client de message
Le tableau suivant présente les types d’informations d’identification possibles que vous pouvez utiliser lors de la création d’une application qui utilise la sécurité des messages. Vous pouvez utiliser ces valeurs dans des fichiers de code ou de configuration.
Réglage | Descriptif |
---|---|
Aucun | Spécifie que le client n’a pas besoin de présenter d’informations d’identification. Cela se traduit par un client anonyme. |
Fenêtres | Autorise les échanges de messages SOAP sous le contexte de sécurité établi avec des informations d’identification Windows. |
Nom d’utilisateur | Permet au service de demander que le client soit authentifié avec des informations d’identification de nom d’utilisateur. Notez que WCF n’autorise aucune opération de chiffrement avec des noms d’utilisateur, telles que la génération d’une signature ou le chiffrement de données. WCF garantit que le transport est sécurisé lors de l’utilisation des informations d’identification de nom d’utilisateur. |
Certificat | Permet au service de demander que le client soit authentifié à l’aide d’un certificat X.509. |
Jeton émis | Type de jeton personnalisé configuré en fonction d’une stratégie de sécurité. Le type de jeton par défaut est Security Assertions Markup Language (SAML). Le jeton est émis par un service de jeton sécurisé. Pour plus d’informations, consultez Fédération et Jetons émis. |
Modèle de négociation des identifiants de service
La négociation est le processus d’établissement d’une confiance entre un client et un service en échangeant des informations d’identification. Le processus est effectué de manière itérative entre le client et le service, afin de divulguer uniquement les informations nécessaires pour l’étape suivante du processus de négociation. Dans la pratique, le résultat final est la remise des informations d’identification d’un service au client à utiliser dans les opérations suivantes.
À une exception près, par défaut, les liaisons fournies par le système dans WCF négocient automatiquement les informations d’identification du service lors de l’utilisation de la sécurité au niveau du message. (L’exception est celle BasicHttpBinding qui n’active pas la sécurité par défaut.) Pour désactiver ce comportement, consultez les propriétés NegotiateServiceCredential et NegotiateServiceCredential.
Remarque
Lorsque la sécurité SSL est utilisée avec .NET Framework 3.5 et versions ultérieures, un client WCF utilise les certificats intermédiaires dans son magasin de certificats et les certificats intermédiaires reçus pendant la négociation SSL pour effectuer la validation de la chaîne de certificats sur le certificat du service. .NET Framework 3.0 utilise uniquement les certificats intermédiaires installés dans le magasin de certificats local.
Négociation hors bande
Si la négociation automatique est désactivée, les informations d'identification du service doivent être approvisionnées du côté client avant d'envoyer des messages au service. Il s’agit également d’un approvisionnement hors bande . Par exemple, si le type d’informations d’identification spécifié est un certificat et que la négociation automatique est désactivée, le client doit contacter le propriétaire du service pour recevoir et installer le certificat sur l’ordinateur exécutant l’application cliente. Cela peut être effectué, par exemple, lorsque vous souhaitez contrôler strictement quels clients peuvent accéder à un service dans un scénario métier-entreprise. Cette négociation hors bande peut s'effectuer par messagerie électronique, et le certificat X.509 est stocké dans le magasin de certificats Windows à l'aide d'un outil tel que le composant logiciel enfichable MMC (Microsoft Management Console).
Remarque
La propriété ClientCredentials est utilisée pour fournir au service un certificat obtenu dans le cadre d'une négociation hors bande. Cela est nécessaire lors de l’utilisation de la BasicHttpBinding classe, car la liaison n’autorise pas la négociation automatisée. La propriété est également utilisée dans le cadre d'un scénario duplex non corrélé. Il s’agit d’un scénario où un serveur envoie un message au client sans exiger que le client envoie d’abord une demande au serveur. Étant donné que le serveur n’a pas de demande du client, il doit utiliser le certificat du client pour chiffrer le message auprès du client.
Définition des valeurs d'informations d'identification
Une fois que vous avez sélectionné un mode de sécurité, vous devez spécifier les informations d’identification réelles. Par exemple, si le type d’informations d’identification est défini sur « certificat », vous devez associer des informations d’identification spécifiques (par exemple, un certificat X.509 spécifique) au service ou au client.
Selon que vous programmez un service ou un client, la méthode de définition de la valeur d’informations d’identification diffère légèrement.
Définition des informations d'identification de service
Si vous utilisez le mode de transport et que vous utilisez HTTP comme transport, vous devez utiliser Internet Information Services (IIS) ou configurer le port avec un certificat. Pour plus d’informations, consultez La vue d’ensemble de la sécurité destransports et HTTP Transport Security.
Pour approvisionner un service avec des informations d’identification dans le code, créez une instance de la ServiceHost classe et spécifiez les informations d’identification appropriées à l’aide de la ServiceCredentials classe, accessible via la Credentials propriété.
Configuration d'un certificat
Pour approvisionner un service avec un certificat X.509 à utiliser pour authentifier le service auprès des clients, utilisez la SetCertificate méthode de la X509CertificateRecipientServiceCredential classe.
Pour approvisionner un service avec un certificat client, utilisez la SetCertificate méthode de la X509CertificateInitiatorServiceCredential classe.
Définition des informations d’identification Windows
Si le client spécifie un nom d’utilisateur et un mot de passe valides, ces informations d’identification sont utilisées pour authentifier le client. Sinon, les informations d’identification actuelles de l’utilisateur connecté sont utilisées.
Définition des informations d’identification du client
Dans WCF, les applications clientes utilisent un client WCF pour se connecter aux services. Chaque client dérive de la ClientBase<TChannel> classe et la ClientCredentials propriété sur le client permet la spécification de différentes valeurs d’informations d’identification du client.
Configuration d'un certificat
Pour approvisionner un service avec un certificat X.509 utilisé pour authentifier le client auprès d’un service, utilisez la SetCertificate méthode de la X509CertificateInitiatorClientCredential classe.
Utilisation des informations d’identification du client pour authentifier un client auprès du service
Les informations d’identification du client requises pour communiquer avec un service sont fournies à l’aide de la propriété ClientCredentials ou Credentials. Le canal de sécurité utilise ces informations pour authentifier le client auprès du service. L’authentification est effectuée via l’un des deux modes suivants :
Les informations d’identification du client sont utilisées une fois avant l’envoi du premier message, à l’aide de l’instance du client WCF pour établir un contexte de sécurité. Tous les messages d’application sont ensuite sécurisés via le contexte de sécurité.
Les informations d’identification du client sont utilisées pour authentifier chaque message d’application envoyé au service. Dans ce cas, aucun contexte n’est établi entre le client et le service.
Les identités établies ne peuvent pas être modifiées
Lorsque la première méthode est utilisée, le contexte établi est définitivement associé à l’identité du client. Autrement dit, une fois le contexte de sécurité établi, l’identité associée au client ne peut pas être modifiée.
Importante
Il existe un cas où l'identité ne peut pas être établie (autrement dit, lorsque le contexte de sécurité établi est activé, ce qui est le comportement par défaut). Si vous créez un service qui communique avec un deuxième service, l’identité utilisée pour ouvrir le client WCF au deuxième service ne peut pas être modifiée. Cela devient un problème si plusieurs clients sont autorisés à utiliser le premier service et que le service emprunte l’identité des clients lors de l’accès au deuxième service. Si le service réutilise le même client pour tous les appelants, tous les appels au deuxième service sont effectués sous l’identité du premier appelant utilisé pour ouvrir le client au deuxième service. En d’autres termes, le service utilise l’identité du premier client pour que tous ses clients communiquent avec le deuxième service. Cela peut entraîner l’élévation de privilèges. Si ce n’est pas le comportement souhaité de votre service, vous devez suivre chaque appelant et créer un client vers le deuxième service pour chaque appelant distinct, et vous assurer que le service utilise uniquement le client approprié pour que l’appelant approprié communique avec le deuxième service.
Pour plus d’informations sur les informations d’identification et les sessions sécurisées, consultez Considérations relatives à la sécurité pour les sessions sécurisées.
Voir aussi
- 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
- Concepts de sécurité
- Sécurisation des services et des clients
- Programmation de la sécurité WCF
- Sécurité du transport HTTP