2011-01-27 24 views
9

Mi escenario es una aplicación de 3 niveles donde el nivel de datos es una base de datos SQL Server, el nivel intermedio es una aplicación WCF alojada en un servicio Windows y finalmente la presentación es una aplicación Asp.Net MVC .Autenticación WCF/ASP.NET

Como es habitual, el nivel intermedio es el que realiza toda la lógica comercial. Acceda a la base de datos, defina las reglas comerciales ... etc.

Bien, hasta ahora todo bien! PERO ahora aquí está la pregunta: ¿cómo manejas la seguridad en tal escenario? Quiero decir, el usuario tiene que iniciar sesión en la aplicación ASP.NET, pero quiero autenticarlo no solo en ASP, sino también en el nivel medio de WCF, ya que un servicio WCF debe tener acceso a más aplicaciones.

Quiero que el usuario inicie sesión en la aplicación Asp.Net y que WCF sepa las credenciales también. ¿Hay algún tipo de sesión en WCF en la que especificar un usuario conectado?

¿Cómo manejan los profesionales la seguridad en este caso? Sé que puede proteger los servicios de WCF con seguridad de mensajes, pero ¿cómo se sincronizan Asp.Net y WCF en un solo usuario registrado? Quiero asegurar las operaciones de WCF dependiendo del usuario para los medios de autorización.

+0

Esta es una pregunta demasiado grande para manejar SO: ocupa 50 páginas en el kit de capacitación de WCF. Te sugiero que comiences con un poco de investigación y luego publiques cualquier pregunta específica que tengas: http://mscerts.net/programming/user-level%20security%20%20%20authorization%20and%20impersonation%20%28part%201%29%20 -% 20authorization.aspx –

+0

¿Una aplicación N-Tier? ¿Qué es N? 2? 3? 20? –

+0

Esto está redactado de una manera general vaga, pero la pregunta sigue siendo válida. Quiero que el usuario autenticado por ASP.NET pase la cadena al servicio WCF como el usuario que ha iniciado sesión. ¿Por qué es tan difícil? – DaveN59

Respuesta

2

Yo sugeriría mirar en el uso de un enfoque como HMAC (Código de autenticación de mensajes Hash) para su seguridad, o un enfoque similar basada en token. La idea sería firmar sus solicitudes en la capa WCF, que se puede usar para autenticar la solicitud e identificar al usuario que realiza la solicitud.

Los elementos esenciales serían un token y un secreto compartido de algún tipo utilizado para firmar cada solicitud. El token le permitirá identificar al usuario en el fin WCF y buscar el secreto compartido para verificar la solicitud. También puede agregar marcas de tiempo/nonces para evitar ataques de repetición y cosas por el estilo.

He usado este enfoque para algunos servicios REST construidas sobre WCF - con la ventaja añadida de que los clientes no tienen que almacenar nombres de usuario y contraseñas, sólo los símbolos de seguridad utilizados para la comunicación. En su caso, tendrá que resolver cómo intercambiar los tokens entre la capa ASP.NET y la capa WCF, pero le proporcionará un método de autenticación unificado para cualquier consumidor de sus servicios WCF.