2009-12-07 16 views
5

Estoy creando un sitio web que contendrá tanto páginas ASP.NET como un applet Flash. Quiero encapsular mi lógica comercial en un servicio WCF que se expondrá a través de dos puntos finales: uno accesible a través de Internet a través de HTTP (S), para uso del cliente Flash, y uno accesible dentro del centro de datos para uso de los servidores de aplicaciones . Si esto no parece un buen enfoque, entonces detenme aquí; de lo contrario, continuaré ...Autenticación basada en tokens en WCF

La pregunta es cómo autenticar las solicitudes provenientes del cliente Flash. Como no quiero almacenar la contraseña del usuario en una cookie del navegador, no quiero enviar la contraseña con cada solicitud, y no quiero tener que usar HTTPS después del inicio de sesión inicial, planeo usar un token- sistema de autenticación basado Tampoco quiero que el usuario tenga que iniciar sesión en el cliente Flash después de iniciar sesión en el sitio, así que planeo usar Javascript para pasar el token al cliente Flash cuando se inicie.

Sé que WCF admite el uso del marco de seguridad integrado de .NET Framework (System.Security) para hacer cumplir el control de acceso, y me gustaría aprovechar esto.

La pregunta, entonces, es: ¿Cómo paso el token al servicio WCF cuando Flash lo llama y cómo se procesa el token en el servidor?

  • WCF tiene un modo de autenticación "emitido token", pero parece que esto está destinado a ser utilizado en un escenario de federación en toda regla con un servicio de token de seguridad de SAML y fichas - un poco más de complejidad que realmente querer. ¿Es posible usar este modo con mis propios tokens de "cadena aleatoria simple"? ¿Si es así, cómo? Tenga en cuenta que esto debe ser compatible con Flash.
  • Podría pasar el token en un encabezado (ya sea un encabezado SOAP o un encabezado HTTP). En este caso, una vez que haya determinado qué usuario está realizando la solicitud, ¿cómo informo al marco para que las comprobaciones de System.Security funcionen?
  • ¿Hay un enfoque diferente en conjunto que deba considerar? Cualquier cosa que evite enviar contraseñas en cada solicitud, me permite usar System.Security, y funciona con Flash es una posibilidad.
+0

Aaron, ¿alguna vez descubrió una manera simple de hacer esto? Estoy intentando hacer una autenticación simple basada en token en WCF y parece mucho más difícil de lo que debería. – technophile

+0

Terminé básicamente haciendo mi propio trabajo.Tengo un punto final WCF que emite tokens: toma un nombre de usuario y una contraseña, los verifica y responde con el token, que en mi caso es simplemente una cadena aleatoria. Los métodos de lógica de negocios reales están en un punto final diferente, que tiene un inspector de mensajes personalizado que lee un encabezado personalizado que contiene el token. En el cliente, otro inspector de mensajes agrega el encabezado a los mensajes salientes. Es más trabajo del que me hubiera gustado hacer, pero parece estar funcionando bien. – Aaron

Respuesta

2

Como parece que la pregunta original ha sido contestada Voy a mantener este breve, pero uno de los enfoques sería de hecho a pasar el token de autenticación en una cabecera HTTP y anular CheckAccess(OperationContext operationContext, ref Message message) en una costumbre ServiceAuthorizationManager.

Ha configurado previamente el servicio para utilizar una política personalizada que implemente IAuthorizationPolicy.

Lo único que queda es implementar clases simples IIdentity y IPrincipal para almacenar su estado de autorización.

Un buen número de artículos existe en este tema:

http://msdn.microsoft.com/en-us/library/system.identitymodel.policy.iauthorizationpolicy.aspx

http://msdn.microsoft.com/en-us/library/system.servicemodel.serviceauthorizationmanager.aspx

supongo que esto todavía puede sentirse como una solución "roll-su-propio", pero su al menos tranquilizador cuando estás siguiendo un patrón establecido. Tiene la ventaja de incluir su código de autorización en sus métodos de servicio.

Cuestiones relacionadas