2010-06-15 15 views
6

He aquí un caso de uso:¿Cómo diseñar la autenticación en un cliente grueso para que sea seguro?

Tengo una aplicación de escritorio (construida usando Eclipse RCP) que al inicio, abre un cuadro de diálogo con los campos 'Nombre de usuario' y 'Contraseña'. Una vez que el usuario final ingresa su nombre de usuario y contraseña, se contacta con un servidor (un servlet remoto de primavera, con el lado del cliente siendo un httpclient de primavera: similar al approacheshere), y la autenticación se realiza en el servidor.

Algunas preguntas relacionadas con el escenario descripto:

  1. si dicho este servicio de autenticación fuera a bajar, lo que sería la mejor manera de manejar más trámite? La autenticación es algo que no puedo eliminar. ¿Sería una buena idea ejecutar el cliente de escritorio en modo "limitado"? Por ejemplo, características importantes/menús/vistas se desactivarán, el resto de la aplicación será accesible?
  2. ¿Debo tener un servicio de autenticación de respaldo ejecutándose en una máquina diferente, trabajando como una copia de seguridad?
  3. ¿Cuáles son las mejores prácticas generales en este escenario? Recuerdo haber leído acerca de los engranajes de Google y cómo te permitiría editar y hacer cosas fuera de línea. ¿Debería diseñarse algo como esto?

Háganme saber sus comentarios/sugerencias de diseño/arquitectura. Aprecio tu ayuda.

Respuesta

5

La respuesta simple es: ¡No dejes que el servicio de autenticación baje!

Asegúrese de que su servicio de autenticación se esté ejecutando en un entorno agrupado y con equilibrio de carga detrás de una IP virtual. De esta forma, puede evitar el tiempo de inactividad en caso de que uno de los servidores individuales se caiga. Esto se aplica no solo al servicio en sí, sino a cualquier fuente de datos en la que confíe.

Obviamente ningún sistema es completamente seguro contra fallas, pero debería poder conseguir su tiempo de actividad lo suficientemente cerca como para que no haya necesidad de construir un modo "limitado" para el cliente de escritorio.

+0

bastante; ahora, ¿tienes una respuesta compleja? :) – Jay

+0

Respuesta compleja: encuentre una forma alternativa de autenticar a sus usuarios. Tal vez la biometría? Siempre puede implementar su idea de un "modo limitado" si cree que proporcionará una funcionalidad significativa para sus usuarios. – dbyrne

+1

biometría - suena interesante, pero obviamente es un poco descabellado. De todos modos, piensa en esto ... Digamos que el servicio no funciona, ¿qué hay de la autenticación de caché y los detalles de autenticación en el lado del cliente? Y, dejaría que los usuarios ejecuten la aplicación de forma normal, pero todos los cambios se confirmarán/sincronizarán solo cuando la red o el servicio vuelvan a estar en línea. ¿Como suena eso? – Jay

3

¿Debo tener un servicio de autenticación de respaldo ejecutándose en una máquina diferente, trabajando como una copia de seguridad?

Sí! Esta sería la mejor solución. El problema debería abordarse en la OMI a nivel de red/infraestructura, no en el cliente.

Si hay partes útiles de la aplicación que aún podrían funcionar sin acceso a la red (por ejemplo, enrutador abajo, NIC se vuelve popular), se podría considerar la opción 1. Compense la cantidad de trabajo necesario en función de la probabilidad de que esto sea así y de la importancia de su aplicación.

2

Si dijo que este servicio de autenticación fuera a bajar, lo que sería la mejor manera de manejar más procedimientos? Autenticación es algo que no puedo eliminar. ¿Sería una buena idea ejecutar el cliente de escritorio en un modo "limitado" ? Para la instancia , se desactivarán las características/menús/vistas importantes , el resto de la aplicación será accesible?

Ejecutar el cliente de escritorio de forma limitada es una muy buena idea. Imagina si no pudieras escribir un correo electrónico, archivos adjuntos o hacer algo en un cliente de correo electrónico si no hubieras iniciado sesión. Una buena experiencia de usuario exige la capacidad de trabajar sin conexión.

¿Debo tener una autenticación servicio de copia de seguridad que se ejecuta en una máquina diferente , trabajando como una copia de seguridad?

Esto ya ha sido respondido muy bien por otros aunque no estoy totalmente de acuerdo con dbyrne. A pesar de que todas sus redes y servidores pueden funcionar correctamente, el tiempo de inactividad es inevitable y la comunicación entre el cliente de escritorio y el servidor no siempre será perfecta.

+0

Estoy de acuerdo con lo que está diciendo, aunque me dio la impresión de que había menos oportunidades para el trabajo "fuera de línea". Una aplicación comercial, por ejemplo, no es de mucha utilidad, a menos que realmente pueda colocar intercambios. Durante los últimos 4 años, he desarrollado y mantenido un servicio de autenticación utilizado por un par de cientos de aplicaciones. Hemos tenido quizás 3 incidentes con el tiempo de inactividad más largo que duró aproximadamente una hora. Una aplicación necesita ser bastante crítica para justificar el desarrollo de un modo "limitado" para una ocurrencia tan rara. Especialmente si no hay mucho para que el usuario haga. – dbyrne

+0

@dbyrne - muy buenos puntos. Estoy de acuerdo en que, en diferentes casos, sería mejor que no ofrecieras una versión limitada de la aplicación, especialmente con la complejidad añadida del desarrollo, etc. – thetaiko

1
  1. si dicho este servicio de autenticación fuera a bajar, lo que sería la mejor manera de manejar más procedimientos? Autenticación es algo que no puedo eliminar. ¿Sería una buena idea ejecutar el cliente de escritorio en un modo "limitado" ? Para la instancia , se desactivarán las características/menús/vistas importantes , el resto de la aplicación será accesible?

¿Es útil el cliente sin el servidor? ¿Hay cosas que el usuario puede hacer? Si es así, ¿quieres que el usuario pueda hacer estas cosas sin autenticarte? Esa es la respuesta a tu pregunta.

No está claro a qué se refiere cuando dice: "Autenticación es algo que no puedo eliminar". A qué te refieres. ¿Quiere decir que hay algunas características que requieren que el usuario esté autenticado o que se trata de un requisito impuesto por otra persona o? (¿Por qué no se puede hacer con la suya?)

  1. ¿Debo tener un servicio de autenticación de copias de seguridad que se ejecuta en una máquina diferente, trabajando como una copia de seguridad ?

¿Cuán útil es su cliente en la situación anterior? Si es muy útil, puede basar esta decisión y cuánto gastar en mantener un servidor de respaldo en lo valiosa que son las características autenticadas.

Si su aplicación es inútil sin autenticación, basar su decisión en cuanto a cuánto invertir en un servidor de autenticación de copia de seguridad sobre cuánto le cuesta cuando los usuarios no pueden autenticarse.

  1. ¿Cuáles son las mejores prácticas generales en este escenario? I Recuerdo haber leído sobre google gears y cómo te dejaría editar y hacer cosas fuera de línea - ¿debería diseñarse algo como ?

Si hay una manera de mantener útil datos fuera de línea, creo que es una buena idea, pero tengo la predisposición en contra de mantener mi información en la nube donde no puedo controlarlo o copia de seguridad. Costará tiempo e implícitamente dinero desarrollar la capacidad de hacer tanto en línea como fuera de línea en comparación con solo uno de los dos. Esta es una llamada de juicio sobre qué tan valiosa es la aplicación para sus usuarios cuando están fuera de línea.

Cuestiones relacionadas