2010-02-19 11 views
5

Estamos desarrollando una aplicación de intranet basada en navegador. Todos los usuarios tienen una cuenta de directorio activo, por lo que la opción obvia sería utilizar la Autenticación de Windows integrada. Pero habrá múltiples usuarios que accedan a la misma máquina cliente, por lo que decidimos usar autenticación basada en formularios (pero autenticada contra AD).¿Cómo autentico al usuario entre ASP.NET y WCF?

En este escenario, ¿cuál es la mejor manera de autenticarse entre mi aplicación ASP.NET (IIS) y WCF Services (otro servidor IIS 7). No quiero usar el modo o certificado de compatibilidad asp.Net.

Estoy pensando en crear otra cuenta de dominio para autenticar ASP.NET y WCF. También estoy pasando la información sobre el usuario actual de ASP.NET a WCF como información de encabezado. ¿Es esta la manera correcta de hacerlo? El siguiente código llamará desde ASP.NET para acceder y obtener cada método de servicio.

// Call WCF service from ASP.NET Application using a new domain account for each call. 
proxy.ClientCredentials.Windows.ClientCredential.Domain = "mydomain"; 
ServiceReference.HelloWorldClient proxy = new ServiceReference.HelloWorldClient(); 
proxy.ClientCredentials.Windows.ClientCredential.UserName = "new_domain_account"; 
proxy.ClientCredentials.Windows.ClientCredential.Password = "password"; 

¿Hay alguna manera mejor de autenticar WCF de ASP.NET?

Gracias, Ash.

Respuesta

0

umm ... si tiene AD y ellos inician sesión con sus credenciales, no importa en qué máquina están, solo use AD. Entonces, ¿qué pasa si usan la misma máquina?

En cualquier caso, Microsoft tiene una gran cantidad de información sobre este tema aquí:

http://wcfsecurity.codeplex.com/wikipage?title=Application%20Scenarios&referringTitle=Home

comprobarlo.

+0

wcf service setup as Integrated Windows Authentication. Habrá muchos usuarios que accedan a una PC cliente usando su cuenta AD. No desean cerrar la sesión de Windows para acceder a esta aplicación. así que configuro la autenticación de formulario. Pero después de iniciar sesión (formulario), si acceden a WCF, la identidad será el usuario de inicio de sesión de Windows original y no el usuario de formulario. – Ash

+0

Ah, creo que entiendo, no desea configurar Kerberos.Si configura Kerberos, entonces puede autenticarse con AD en el servicio web sin que el usuario tenga que hacer nada. ¿O es esta la mejor manera de la que estás hablando? – Hogan

+0

sí, quiero configurar Kerberos y quiero autenticarme con AD, pero de todos modos puedo pasar el usuario de formulario ASP.NET autenticado actualmente a WCF, por lo que WCF lo considera el usuario actual. (Usuario AD). Actualmente, WCF se autentica, pero no es el último usuario de formulario, sino el usuario de inicio de sesión de Windows original. Gracias por el enlace, pero no pude encontrar la respuesta correcta para ello. – Ash

3

No hay nada de especial en autenticar una aplicación ASP.NET al servicio WCF. Todas las opciones de autenticación normales están disponibles (nombre de usuario, X.509, ventanas).

Lo interesante aquí es que también quiere pasar las credenciales del cliente basadas en navegador. Este es un patrón conocido llamado sub sistema de confianza. Y sí, puede pasarlos en el encabezado siempre que el mensaje esté protegido (encriptado).

1

Parece que no es un problema de WCF, sino un problema con el navegador que se autentica de forma transparente.

Intente deshabilitar la autenticación integrada de Windows en IIS para la aplicación ASP.NET y cambie a autenticación básica o implícita. Ambos se seguirán autenticando frente a AD, pero el navegador no autenticará de forma transparente al usuario que ha iniciado sesión.

Luego, en su aplicación ASP.NET, simplemente haga que use la suplantación y pase las credenciales de las que IIS tenga conocimiento al servicio WCF al que está llamando.

1

No conozco ASP.NET en absoluto, pero he hecho algunos WCF, y creo que lo que debe hacer es obtener el "inicio de sesión de formulario" para luego suplantar al usuario en el hilo actual, y luego iniciar la conexión WCF con el otro servidor. Eche un vistazo a this article on msdn para una descripción rápida de algo de esto puramente dentro de WCF. No sé cómo va a integrar esto en ASP.NET (como dije, sé cero sobre esa tecnología), pero conceptualmente creo que esto es lo que tendrá que hacer.

Cuestiones relacionadas