Validación de seguridad
Este ejemplo de ServiceValidation muestra cómo usar un comportamiento personalizado a fin de validar los servicios en un equipo y asegurarse de que cumplen criterios específicos. En este ejemplo, el comportamiento personalizado valida estos servicios analizando cada extremo en el servicio y comprobando si contienen elementos de enlace seguros. Este ejemplo se basa en la introducción.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Comportamiento personalizado de validación del punto de conexión
Al agregar código de usuario al método Validate
contenido en la interfaz IServiceBehavior, se puede dar el comportamiento personalizado a un servicio o punto de conexión para realizar las acciones definidas por el usuario. El código siguiente se utiliza para recorrer a través de cada extremo contenido en un servicio, que busca en las colecciones de enlaces los enlaces seguros.
public void Validate(ServiceDescription serviceDescription,
ServiceHostBase serviceHostBase)
{
// Loop through each endpoint individually, gathering their
// binding elements.
foreach (ServiceEndpoint endpoint in serviceDescription.Endpoints)
{
secureElementFound = false;
// Retrieve the endpoint's binding element collection.
BindingElementCollection bindingElements =
endpoint.Binding.CreateBindingElements();
// Look to see if the binding elements collection contains any
// secure binding elements. Transport, Asymmetric, and Symmetric
// binding elements are all derived from SecurityBindingElement.
if ((bindingElements.Find<SecurityBindingElement>() != null) || (bindingElements.Find<HttpsTransportBindingElement>() != null) || (bindingElements.Find<WindowsStreamSecurityBindingElement>() != null) || (bindingElements.Find<SslStreamSecurityBindingElement>() != null))
{
secureElementFound = true;
}
// Send a message to the system event viewer when an endpoint is deemed insecure.
if (!secureElementFound)
throw new Exception(System.DateTime.Now.ToString() + ": The endpoint \"" + endpoint.Name + "\" has no secure bindings.");
}
}
Al agregar el código siguiente al archivo Web.config, se agrega la extensión de comportamiento serviceValidate
para que el servicio la reconozca.
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="endpointValidate" type="Microsoft.ServiceModel.Samples.EndpointValidateElement, endpointValidate, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
...
</system.serviceModel>
Una vez agregada al servicio la extensión de comportamiento, ahora es posible agregar el comportamiento endpointValidate
a la lista de comportamientos en el archivo Web.config y así al servicio.
<behaviors>
<serviceBehaviors>
<behavior name="CalcServiceSEB1">
<serviceMetadata httpGetEnabled="true" />
<endpointValidate />
</behavior>
</serviceBehaviors>
</behaviors>
Los comportamientos y las extensiones que se agregan al archivo Web.config aplican el comportamiento a los servicios individuales, mientras que cuando se agregan al archivo Machine.config aplican el comportamiento a cada servicio activo del equipo.
Nota
Al agregar el comportamiento a todos los servicios, la sugerencia es realizar una copia de seguridad del archivo Machine.config antes de realizar cualquier modificación.
Ahora ejecute el cliente proporcionado en el directorio client\bin de este ejemplo. Se produce una excepción con el siguiente mensaje: "No se pudo activar el servicio solicitado, http://localhost/servicemodelsamples/service.svc
". Esto se prevé porque el comportamiento de validación del punto de conexión considera inseguro un punto de conexión y evita que se inicie el servicio. El comportamiento también produce una excepción interna que describe qué punto de conexión es inseguro y escribe un mensaje en el visor de eventos en el origen "System.ServiceModel 4.0.0.0" y la categoría "WebHost". También es posible activar el seguimiento en el servicio en este ejemplo. Esto le permite al usuario ver las excepciones iniciadas por el comportamiento que valida el extremo abriendo los seguimientos de servicio resultantes mediante la herramienta Service Trace Viewer.
Puede ver los mensajes de excepción de validación del punto de conexión en el visor de eventos
Haga clic en el menú Inicio y seleccione Ejecutar.
Escriba
eventvwr
y haga clic en Aceptar.En la ventana Visor de eventos, haga clic en Aplicación.
Haga doble clic en el evento "System.ServiceModel 4.0.0.0" que se ha agregado recientemente en la categoría "WebHost" en la ventana de la aplicación para ver los mensajes inseguros del punto de conexión.
Configuración, compilación y ejecución del ejemplo
Asegúrese de que ha realizado el procedimiento de instalación única para los ejemplos de Windows Communication Foundation.
Para compilar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Building the Windows Communication Foundation Samples.
Para ejecutar el ejemplo en una configuración de una sola máquina o de varias máquinas, siga las instrucciones que se indican en Ejecución de los ejemplos de Windows Communication Foundation.