Share via


Autenticación personalizada de canal del mismo nivel

Download sample

Este ejemplo muestra cómo utilizar el enlace NetPeerTcpBinding con el modo de autenticación personalizado, que proporciona comunicación entre varias personas usando la autenticación del mismo nivel proporcionada por la aplicación. Este ejemplo es una variación de Ejemplo de introducción. Consulte Ejemplo de introducción para obtener una descripción general de Windows Communication Foundation (WCF).

En este ejemplo, todas las instancias son aplicaciones de consola autoalojadas; no hay concepto de cliente y servidor.

A diferencia de otros ejemplos de enlace de transporte, este ejemplo utiliza la interfaz de contrato IChat con el propósito de mostrar la comunicación entre varias personas. Todas las instancias implementan este contrato para recibir mensajes y crear servidores proxy del mismo contrato para enviar mensajes a la malla. Esto se muestra creando un canal dúplex a la malla.

Nota

El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.

PeerChannel es una tecnología de comunicaciones de punto a punto (P2P) entre varias partes en WCF. Permite una mensajería segura, escalable y confiable. Un ejemplo común de una aplicación entre varias partes que se puede beneficiar del canal del mismo nivel es el caso de las aplicaciones colaborativas como el chat, donde un grupo de personas conversan entre ellas de la misma manera que de punto a punto sin la necesidad de servidores. PeerChannel habilita los escenarios de consumidor y empresariales alrededor de la colaboración de P2P, la distribución de contenido, el equilibrio de carga y el procesamiento distribuido.

PeerChannel introduce los siguientes nuevos conceptos:

  • Una malla es una colección con nombre (un grafo interconectado) de nodos del mismo nivel que pueden comunicarse entre ellos y que se identifican por un id. de malla único.

    Nota

    Los nodos activos en la malla publican su nombre de malla de manera que otros puedan encontrarlos. Una malla tiene las características siguientes: se ajusta automáticamente cuando los nodos se combinan y dejan la malla, con lo que se asegura que todos los nodos tienen buena conectividad con la malla, y que las conexiones se optimizan dinámicamente dependiendo de los modelos de tráfico actuales.

  • Un nodo del mismo nivel es un extremo en una malla. Una aplicación puede tener varios nodos del mismo nivel que participan en mallas diferentes.

  • Una resolución del mismo nivel es responsable de resolver un id. de malla en las direcciones de extremo de unos nodos en la malla. Un nodo del mismo nivel utiliza estas direcciones para conectarse con otros nodos en la malla. Esto permite propagar los mensajes por toda la malla.

PeerTransportCredentialType especifica cómo los puntos de la malla se autentican unos con otros. Esta propiedad se puede especificar en la configuración de enlace, en el objeto NetPeerTcpBinding o usando PeerTransportBindingElement. Se debe agregar una instancia de ClientCredentialSettings (o ServiceCredentialSettings) con credenciales adecuadas especificadas en la propiedad Peer a la colección de comportamientos en el generador de canales o host de servicio en función del uso.

PeerChannel admite los modos de autenticación siguientes en la clase PeerTransportCredentialType:

  1. Password. Éste es el modo predeterminado de autenticación para PeerChannel. En este modo, se espera que todos los participantes en la malla demuestren que conocen una contraseña secreta. Esto se logra estableciendo una conexión segura entre los vecinos e intercambiando una transformación de esta contraseña. Cuando se especifica Password, la propiedad ClientCredentialSettings.Peer debe llevar una contraseña válida y opcionalmente una instancia de X509Certificate2 (con SetSelfCertificate).

  2. Certificate. En este modo, la autenticación específica de la aplicación se realiza al establecer las conexiones del mismo nivel. Cuando se especifica este modo, la aplicación debe especificar una implementación concreta de X509Certificate2Validator en ClientCredentialSettings.Peer.PeerAuthentication que se agrega al generador de canales.

El enlace se especifica en el archivo de configuración del cliente. El tipo de enlace se especifica en el atributo binding del elemento del extremo tal y como se explica en el ejemplo siguiente.

<client>
  <!-- chat instance participating in the mesh -->
  <endpoint name="ChatEndpoint"
            address="net.p2p://SecurechatMesh/servicemodelsamples/chat"
            binding="netPeerTcpBinding"
            bindingConfiguration="MyBinding"
            contract="Microsoft.ServiceModel.Samples.IChat">
  </endpoint>
</client>

Si utiliza el enlace NetPeerTcpBinding con el comportamiento predeterminado, se habilita la seguridad basada en la contraseña. El elemento de binding proporciona los atributos para establecer el puerto, escuchar la dirección IP, el tipo de resolución, el tamaño máximo del mensaje, el tamaño máximo del grupo de búferes, las cuotas del lector, el modo de autenticación, la autenticación de mensajes y tiempos de espera (cerrar, abrir, enviar y recibir).

Nota

Este ejemplo utiliza la resolución predeterminada de mismo nivel (PNRP), que no está disponible en Windows Server 2003. Por consiguiente, para ejecutar este ejemplo en Windows Server 2003, debe utilizar una resolución de mismo nivel personalizada. Consulte Chat del canal del mismo nivel para obtener un ejemplo que utiliza una resolución de mismo nivel personalizada, por ejemplo:

<netPeerTcpBinding>
    <binding configurationName="Binding1"> 
        <resolver mode="Custom">
            <customResolver type=
                 "MyAppNameSpace.MyCustomPeerResolver, myApp"/>
        </resolver>
    </binding>
</netPeerTcpBinding>

El archivo que contiene MyCustomPeerResolver debe estar compilado con las instancias del chat. Tenga en cuenta que si el ejemplo se ejecuta en varios equipos con plataformas diferentes, deberían usar la misma resolución.

Este ejemplo también muestra cómo recuperar el nodo de mismo nivel asociado con el receptor o instancia del remitente y cómo registrarse para sus eventos en línea y sin conexión. Se desencadena un evento en línea cuando el nodo entre pares está conectado al menos a otro nodo del mismo nivel en la malla. Se desencadena un evento sin conexión cuando un nodo del mismo nivel ya no está conectado a cualquier otro nodo del mismo nivel en la malla.

En este momento, PeerChannel no se integra con la ServiceModel Metadata Utility Tool (Svcutil.exe).

Cuando se ejecuta el ejemplo, el cliente muestra un mensaje que indica que está listo para enviar los mensajes. Los mensajes enviados por un cliente aparecen en las ventanas de la consola de todos los otros clientes combinados en la misma malla. Para finalizar el cliente, presione la tecla Q, a continuación, presione Entrar en las ventanas de la consola de un cliente.

Si habilita el seguimiento o registro de los mensajes, puede supervisar la actividad del mensaje en un nivel más profundo. Los procedimientos siguientes describen cómo habilitar el seguimiento y el registro de los mensajes.

Nota

Es importante tener en cuenta que el ejemplo no administra actualmente todas las posibles excepciones que la infraestructura puede producir. Si está utilizando estos ejemplos en un entorno comercial/producción, siga los consejos recomendados para la gestión correcta de las excepciones.

Para configurar, generar y ejecutar el ejemplo

  1. Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.

  2. Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.

  3. Para ejecutar el ejemplo en una configuración de equipos única, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.

  4. Para instalar PNRP en Windows XP SP2 (instalación única):

    1. En el Panel de control, haga doble clic en Agregar o quitar programas.

    2. En el cuadro de diálogo Agregar o quitar programas, haga clic en Agregar o quitar componentes de Windows.

    3. En el Asistente para componentes de Windows, seleccione la casilla de verificación "Servicios de red" y haga clic en "Detalles".

    4. Marque la casilla "Entre iguales" y haga clic en "Aceptar".

    5. Haga clic en "Siguiente" en el Asistente para componentes de Windows.

    6. Cuando la instalación termine, haga clic en "Finalizar".

    7. En un símbolo del sistema, inicie el servicio PNRP con el comando siguiente: net start pnrpsvc.

  5. Siempre que el paso 3 hace referencia al cliente y al servicio, esos pasos se aplican para separar instancias de la aplicación.

  6. Si ejecuta por primera vez este ejemplo en un equipo, ejecute Setup.bat para crear un certificado que emite la autoridad y dos certificados de cliente. El nombre predeterminado para la autoridad emisora es "TrustedPeerChannelIssuer" y "peer1" y "peer2" para los certificados de cliente. De manera opcional, se pueden especificar los nombres pasando los argumentos a Setup.bat de esta forma: "setup.bat <nombremismonivel> <nombreemisor>", donde <nombremismonivel> es un nombre de prefijo de los clientes y <nombreemisor> es el nombre del emisor de confianza del ejemplo. Por ejemplo, al escribir "setup.bat peer fake_issuer" se crea un emisor de confianza denominado "fake_issuer" y certificados de cliente denominados "peer1" y "peer2". Si se ejecutan todas las instancias del ejemplo en un equipo, continúe con el paso 7.

  7. Pasos adicionales para una instalación en varios equipos: para ejecutar el ejemplo en equipos diferentes, la información del certificado debe copiarse desde un equipo en el resto de equipos que ejecuten el ejemplo, de manera que la información del emisor sea coherente en todos los niveles. Esto se puede lograr exportando certificados de cliente creados utilizando el emisor de confianza (generado por Setup.bat). El emisor de confianza (TrustedPeerChannelIssuer.cer si se utiliza el nombre predeterminado) también se debe copiar en todos los equipos cliente que ejecutan el ejemplo. Siga los tres pasos siguientes:

    1. Transferir el emisor de confianza: copie el archivo .cer (se genera ejecutando Setup.bat en la misma carpeta) en el equipo cliente. Haga clic con el botón secundario en el archivo y seleccione Instalar certificado. Presione Siguiente y, a continuación, seleccione Colocar todos los certificados en el siguiente almacén. Presione Examinar y elija Personas de confianza como el destino para el certificado. Seleccione Siguiente y Finalizar para terminar de importar el certificado.

    2. Exportar el certificado del cliente: inicie ejecutando Certmgr.msc en el equipo utilizado para generar los certificados de cliente. Seleccione el certificado de cliente desde el almacén personal (debajo de "Certificados - Usuario actual" - > "Personal" - > "Certificados"). Haga clic con el botón secundario en el certificado y seleccione "Todas las tareas" - > "Exportar" para iniciar el Asistente para exportación de certificados. Presione "Siguiente", seleccione "Exportar la clave privada" y presione "Siguiente". Seleccione de nuevo "Siguiente" para elegir el formato .pfx y los valores predeterminados. Escriba una contraseña para los certificados y haga clic de nuevo en "Siguiente". Finalmente, elija una ruta de acceso y un nombre de archivo y haga clic en "Siguiente" y "Finalizar" para completar el proceso de exportación.

    3. Importar el certificado de cliente: copie el archivo .pfx creado en el paso (b) en el equipo cliente. Haga clic con el botón secundario en el archivo y seleccione "Instalar PFX". Presione dos veces "Siguiente" y, a continuación, escriba la contraseña utilizada para exportar el certificado. Presione "Siguiente" y "Finalizar" para colocar el certificado en el almacén personal.

      Nota

      Crear un emisor de confianza y exportarlo utilizando la transferencia de archivos pueden suponer ciertos riesgos para la seguridad si el archivo se distribuye de forma inadecuada. Asegúrese de limpiar los certificados del ejemplo después de ejecutar el ejemplo (paso 8).

  8. Ejecute tantas instancias de la aplicación como desee. Los mensajes enviados por una instancia son recibidos por otros. Cada instancia tiene el nombre predeterminado de "peer1". Para distinguir entre las instancias concretas, cambie el valor de la clave de "miembro" en appSettings en el archivo de configuración de la aplicación y cree un certificado de cliente con el mismo nombre.

  9. Finalmente, ejecute Cleanup.bat para quitar certificados creados por este ejemplo. Si se utilizan los nombres no predeterminados, ejecute "Cleanup.bat <nombremismonivel> <nombreemisor>" con los mismos valores utilizados en el paso 6.

Footer image

Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.