Comment : définir une inclinaison de l'horloge maximale
Les fonctions à durée critique peuvent dérailler si les paramètres de l'horloge sont différents sur deux ordinateurs. Pour limiter cette possibilité, vous pouvez affecter à la propriété MaxClockSkew un TimeSpan. Cette propriété est disponible sur deux classes :
Important Pour une conversation sécurisée, les modifications de la propriété MaxClockSkew doivent être effectuées lorsque le service ou le client est initialisé. Pour ce faire, vous devez affecter à la propriété la valeur de l'SecurityBindingElement retourné par BootstrapSecurityBindingElement. |
Pour modifier la propriété sur l'une des liaisons fournies par le système, vous devez rechercher l'élément de liaison de sécurité dans la collection de liaisons et affecter une nouvelle valeur à la propriété MaxClockSkew. Deux classes dérivent de SecurityBindingElement : SymmetricSecurityBindingElement et AsymmetricSecurityBindingElement. Lorsque vous récupérez la liaison de sécurité de la collection, vous devez effectuer une conversion de type en l'un de ces types afin de définir correctement la propriété MaxClockSkew. L'exemple suivant utilise un WSHttpBinding, qui utilise SymmetricSecurityBindingElement. Pour obtenir une liste qui spécifie quel type de liaison de sécurité à 'utiliser dans chaque liaison fournie par le système, consultez Liaisons fournies par le système.
Pour créer une liaison personnalisée avec une nouvelle valeur d'inclinaison de l'horloge dans du code
-
Remarque Ajoutez des références aux espaces de noms suivants dans votre code : System.ServiceModel.Channels, System.ServiceModel.Description, System.Security.Permissions et System.ServiceModel.Security.Tokens. Créez une instance d'une classe WSHttpBinding et choisissez le mode de sécurité Message.
Créez une nouvelle instance de la classe BindingElementCollection en appelant la méthode CreateBindingElements.
Utilisez la méthode Find de la classe BindingElementCollection pour rechercher l'élément de liaison de sécurité.
Lorsque vous utilisez la méthode Find, effectuez une conversion de type au type réel. L'exemple suivant effectue une conversion de type au type SymmetricSecurityBindingElement.
Définissez la propriété MaxClockSkew sur l'élément de liaison de sécurité.
Créez un ServiceHost avec un type de service approprié et une adresse de base.
Utilisez la méthode AddServiceEndpoint pour ajouter un point de terminaison et inclure la CustomBinding.
Pour définir MaxClockSkew dans la configuration
Créez un customBinding Element dans la section de l'élément <Bindings>.
Créez un élément <binding> et affectez une valeur appropriée à l'attribut name. L'exemple suivant lui affecte la valeur
MaxClockSkewBinding
.Ajoutez un élément de codage. L'exemple suivant ajoute un textMessageEncoding element.
Ajoutez un élément security Element of customBinding, puis affectez à l'attribut authenticationMode une valeur appropriée. L'exemple suivant affecte à l'attribut la valeur Kerberos pour spécifier que le service utilise l'authentification Windows.
Ajoutez un localServiceSettings element et affectez une valeur au format "##:##:##" à l'attribut maxClockSkew. L'exemple suivant lui attribue la valeur 7 minutes. Ajoutez éventuellement un localServiceSettings element et affectez un paramètre approprié à l'attribut maxClockSkew.
Ajoutez un élément de transport. L'exemple suivant utilise un httpTransport element :
Pour une conversation sécurisée, les paramètres de sécurité doivent se produire à l'initialisation démarrage dans l'élément secureConversationBootstrap.
<bindings> <customBinding> <binding name="MaxClockSkewBinding"> <textMessageEncoding /> <security authenticationMode="Kerberos"> <localClientSettings maxClockSkew="00:07:00" /> <localServiceSettings maxClockSkew="00:07:00" /> <secureConversationBootstrap> <localClientSettings maxClockSkew="00:30:00" /> <localServiceSettings maxClockSkew="00:30:00" /> </secureConversationBootstrap> </security> <httpTransport /> </binding> </customBinding> </bindings>
Voir aussi
Référence
LocalClientSecuritySettings
LocalServiceSecuritySettings
CustomBinding
Concepts
Comment : créer une liaison personnalisée à l'aide de SecurityBindingElement