Saltar al contenido

Autenticación cliente-servidor: ¿utiliza SSPI?

Esta sección ha sido evaluado por expertos para garantizar la veracidad de esta división.

Solución:

Actualizar:

SSPI es el enfoque correcto para esto. La API no es demasiado difícil de usar, pero requiere un proyecto de tamaño decente para encajar en C #.

En el proceso de investigar los bits necesarios para resolver esta pregunta, escribí un proyecto para proporcionar SSPI en .Net. A continuación, describo los conceptos básicos de la interfaz con la API SSPI de Windows para que cualquiera pueda replicar mis resultados. Si desea usar SSPI en .Net, puedo sugerirle que use el proyecto que creé para resolver esto:

NSspi: una interfaz .Net para la API SSPI

SSPI le proporciona matrices de bytes sin procesar que contienen tokens de autenticación que luego decide cómo transmitir, ya sea a través de un socket con mensajes en formato binario, un canal XML personalizado, .Net Remoting, alguna forma de WCF, diablos, incluso un puerto serie. Tú decides cómo lidiar con ellos. Con SSPI, un servidor puede autenticar clientes, identificar al cliente de forma segura e incluso realizar procedimientos básicos de manejo de mensajes como cifrado / firma utilizando el contexto de seguridad establecido con el cliente.

La API de SSPI se documenta aquí: Descripción general de la API de SSPI

Específicamente, eche un vistazo a las siguientes funciones:

  • Adquirir credenciales
    • Adquiere un identificador para algún tipo de credenciales (por ejemplo, el inicio de sesión del usuario actual). Utilizado por servidores y clientes.
  • InitializeSecurityContext
    • Usado por los clientes para establecer un contexto de seguridad con un servidor.
  • AcceptSecurityContext
    • Utilizado por servidores para establecer un contexto de seguridad con un cliente.

El flujo de trabajo típico es que cada lado inicializará sus credenciales usando AcquireCredentialsHandle. El ciclo de autenticación comienza y progresa de la siguiente manera:

  • El cliente invoca InitializeSecurityContext, sin proporcionar tokens de entrada, lo que devuelve tokens de salida en forma de byte. array. ISC devuelve ‘ContinueNeeded’ para indicar que el ciclo de autenticación no está completo.
  • El cliente envía los tokens al servidor por el medio que desee.
  • El servidor alimenta los tokens recibidos como entrada a AcceptSecurityContext y produce sus propios tokens de salida. ASC también devuelve ‘ContinueNeeded’ para indicar que el ciclo de autenticación no está completo.
  • Luego, el servidor envía sus tokens de salida al cliente.
  • El cliente proporciona los tokens de los servidores como entrada a InitializeSecurityContext, que devuelve nuevos tokens de salida.
  • El cliente envía sus nuevos tokens de salida al servidor.

Este ciclo continúa hasta que el cliente ve que InitializeSecurityContext regresa ‘OK’ y el servidor ve que AcceptSecurityContext regresa ‘OK’. Cada función puede devolver ‘OK’ y aún proporcionar un token de salida (como lo indica un nonull return), para indicar que todavía tiene que enviar datos al otro lado. Así es como el cliente sabe que su mitad está hecha pero la del servidor aún está incompleta; y viceversa si el servidor se completa antes que el cliente. El lado que se completa primero (devuelve ‘OK’) depende del paquete de seguridad específico que SSPI utiliza bajo el capó, y cualquier consumidor de SSPI debe ser consciente de esto.

La información anterior debería ser suficiente para que cualquiera pueda interactuar con el sistema SSPI a fin de proporcionar ‘Autenticación integrada de Windows’ en su aplicación y replicar mis resultados.

A continuación se muestra mi respuesta anterior cuando aprendí cómo invocar la API SSPI.


Me había olvidado de esta pregunta y casualmente volví a este problema hace unos días por capricho. Sin embargo, necesito resolver este problema en uno o dos años 🙂

Es posible en .Net, y actualmente estoy desarrollando un contenedor .Net SSPI que tengo la intención de publicar.

Estoy basando mi trabajo en algunas muestras de SSPI de Microsoft que encontré.

La muestra contiene un ensamblado administrado por C ++ / CLI que implementa las partes necesarias de la API SSPI (en la carpeta MicrosoftSamplesSecuritySSPISSPI extraído del archivo REMSSPI.exe). Luego tienen dos UI, una aplicación de cliente y una aplicación de servidor, ambas escritas en C # que hacen uso de esta API para realizar la autenticación SSPI.

Las IU hacen uso de la función de comunicación remota .Net para unirlo todo, pero si entiendo correctamente la API de SSPI, la única información que el cliente y el servidor deben intercambiar consiste en bytes[]s que contienen datos de token de contexto de seguridad, que pueden integrarse fácilmente en cualquier infraestructura de comunicaciones que desee; en mi caso, un protocolo binario de mi propio diseño.

Algunas notas sobre cómo hacer que la muestra funcione: tienen la fuente de la biblioteca ‘SSPI’, que se compila mejor en VS 2005, aunque he conseguido que funcione en 2008; 2010 o versiones posteriores requerirían algunas modificaciones, ya que utilizan construcciones de lenguaje que estaban en desuso. Es posible que también deba modificar los archivos de encabezado que forman parte del SDK de su plataforma, porque hacen uso de asignaciones de puntero constante a variables de desconcentración, y no conozco una mejor manera de hacer feliz al compilador (nunca he usado C ++ / CLI antes).

Incluyen una dll SSPI compilada en la carpeta Microsoft Samples Security SSPI bin. Para que los binarios cliente / servidor funcionen, debe copiar ese dll en su directorio bin, de lo contrario, la resolución del ensamblaje falló.

Entonces, para resumir:

  • Vaya aquí para descargar el archivo zip autoextraíble de muestra REMSSPI.exe.
  • Extraiga el archivo REMSSPI.exe (dos veces ..)
  • Microsoft Samples Security SSPI
    • bin – contiene dll compilado Microsoft.Samples.Security.SSPI.dll
    • SSPI – contiene fuente para dll
    • Sample – contiene el código fuente de la interfaz de usuario
      • bin – Contiene muestras de UI de compilación. Copie el archivo SSPI.dll aquí y ejecute ControlPanel.Client.exe y ControlPanel.Server.exe

Aquí puedes ver las reseñas y valoraciones de los lectores

Finalizando este artículo puedes encontrar las explicaciones de otros usuarios, tú asimismo eres capaz dejar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *