¿Son seguras las sesiones de WCF?

Estoy desarrollando un servicio WCF con algún tipo de autenticación.

Todos los usuarios serán iguales, por lo que planeo requerir sesiones y solo tengo un método que inicia una sesión y no la termina. Simplificando:

[OperationContract(IsInitiating = true, IsTerminating = false)]
void Open(String user, String password);

Entonces, si la contraseña es incorrecta (nuevamente, esto es una simplificación), plantearía una excepción para que la sesión finalice. De esta manera, no necesito verificar las credenciales en cada llamada al método.

¿Es este un buen enfoque? Si no es así, ¿por qué?

Actualizar: Tuve que escribir esto a toda prisa, así que intentaré elaborar un poco y aclarar mi pregunta.

El método de autenticación es un requisito y no estoy preguntando al respecto. Quiero saber sobre la gestión de sesiones.

Cuando utilizo el [OperationContract (IsInitiating = true, IsTerminating = false)] se inicia una sesión. No necesito almacenar una identificación ni nada; WCF gestiona todo. Cuando se genera una excepción o se llama a un método con IsTerminating = true, la sesión finaliza y las llamadas posteriores a los métodos de servicio fallan hasta que se inicia una nueva sesión.

Lo que quiero saber es si es razonablemente fácil para un atacante eludir las cosas de administración de sesiones de WCF, creando una sola sin llamar a Open, el único método de mi servicio con IsInitiating = true e IsTerminating = false, entonces, la única forma para iniciar legalmente una sesión.

preguntado el 16 de mayo de 11 a las 17:05

Este no es un buen enfoque. La respuesta aquí tiene enlaces a buenas descripciones generales de seguridad de WCF. Debe introducir el control de seguridad en el marco de WCF porque está seguro de que se implementa correctamente en lugar de implementar el suyo. -

Lo sentimos, los requisitos son requisitos. Solo quiero saber sobre la seguridad de las sesiones WCF. -

2 Respuestas

Las sesiones de WCF pueden ser tan seguras como desee, según el enlace que elija.

http://msdn.microsoft.com/en-us/library/ms731172.aspx

Sin embargo, sugeriría que lo anterior no funcionaría, porque su método no devuelve ningún valor al cliente que llama para indicar qué debe pasar en llamadas posteriores (es decir, una ID de sesión) para autenticarse.

Un mejor enfoque podría ser realizar todas las comprobaciones de seguridad en los enlaces (consulte el enlace anterior para ver la amplia gama de opciones), dejando que el servicio en sí solo exponga los métodos y no se preocupe por la autenticación de los clientes.

contestado el 16 de mayo de 11 a las 21:05

No necesito pasar una identificación; WCF administra automáticamente las sesiones. Lo que necesito saber es si existe una forma razonable de que un cliente maligno falsifique una sesión sin llamar a Open. - cuervo

Sí, sería trivial para un cliente malintencionado "secuestrar" una sesión autenticada a menos que usted cifre todas las comunicaciones que llevan el identificador de sesión utilizando una clave de cifrado que no sea accesible para posibles interceptores de comunicaciones. Por otra parte, sería igualmente sencillo para ellos interceptar los nombres de usuario y las contraseñas transmitidos sin las protecciones adecuadas de cifrado y anti-reproducción.

A veces, los requisitos deben revisarse una vez que se comienzan a tomar las decisiones de implementación. Parece que este podría ser uno de esos casos ...

contestado el 17 de mayo de 11 a las 15:05

Gracias por tu respuesta. Como ya se dijo, el Open (usuario de cadena, contraseña de cadena) es una gran simplificación de un sistema más complejo (autenticación de desafío-respuesta contra un sistema externo). Volviendo a las sesiones de WCF, y asumiendo que el sistema de inicio de sesión es razonablemente seguro, ¿ sabes qué que la identificación de la sesión se envía como texto sin formato? ¿Alguna referencia a la mano? Espero que sea algo más elaborado ... - cuervo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.