Pregunta

Soy nuevo en la programación web, proveniente de un fondo de desarrollo de videojuegos (c ++), y realmente estoy empezando a sentir una sobrecarga de información. ¡Hay tantas bibliotecas compitiendo que todas eligen algo que no les gusta en otra biblioteca y crean una forma completamente nueva de hacer lo mismo! Estoy seguro de que hay buenas razones para esto, y no quiero quejarme, así que explicaré mi problema.

Para facilitar mi viaje, he decidido comenzar a aprender Google App Engine + GWT + Java. Me gusta porque es una arquitectura de servidor distribuida de fábrica, y elegí Java debido a mi fondo de C ++.

Para empezar, escribí una pequeña aplicación similar a Twitter porque prueba varios aspectos del desarrollo web, a saber: REST, análisis / creación JSON, comunicaciones AJAX y generación de HTML. No me tomó mucho tiempo crear un pequeño sitio que permita a un usuario ingresar su nombre y contraseña en la página del navegador, enviar los datos a mi aplicación, iniciar sesión en su nombre, tomar su lista de amigos y emitir se devuelve al cliente como JSON, donde lo analizo y lo muestro.

Cosas bastante simples.

Entonces, el siguiente paso fue que no me gustaba enviar la contraseña que el usuario ingresó a través de la red como texto simple (obviamente). Eso me hizo pensar en todas las tuberías que necesitaría:

  1. Autentique a los usuarios en mi propia base de datos, no en Google. (Login / Contraseña perdida / Logout)
  2. Entrar / salir (seguir) una sesión (sesión iniciada / sesión cerrada).
  3. Almacenar datos de usuarios en la base de datos de mi aplicación de Google.

Todas las cosas bastante estándar que han existido por siempre. Bueno, empecé a buscar una biblioteca de autenticación de Java y había bibliotecas tan grandes y monolíticas con enormes curvas de aprendizaje, y algunas son antiguas o ya no están a mi favor ... ¡Me siento como un programador principiante! ¡Sólo quiero tener una página de inicio de sesión! :)

Entonces, comencé a leer sobre cómo funciona la plomería de la autenticación, y hay una gran cantidad de cosas que asimilar. Aparentemente, es bastante común que las personas se deshagan de ellas (sin seguridad). Prefiero tomar una solución que exista y sea sólida.

Entonces, la pregunta es: ¿qué hace la gente al respecto? Twitter es compatible con HTTP y HTTPS, pero el valor predeterminado es HTTP para su API REST. ¿Eso significa que las contraseñas de las personas están volando sin protección, listas para ser interceptadas por piratas informáticos?

También miré a OAuth, que se ve excelente, pero no tiene un caso para un viejo viejo. No quiero saber ni preocuparme de lo que es OpenID. Personas no técnicas a las que les he mostrado OpenID son como " wha? Solo quiero poner mi nombre de usuario / contraseña en " ;.

Como nota al margen, ¿alguien ha tenido suerte con Spring.Security en Google App Engine?

De todos modos, estoy despotricando. Solo quiero saber qué hace la gente (no en Python, Rails, etc., pero en el buen Java antiguo). Me encantaría tener una página de inicio de sesión como Digg, incluso con una opción algún día para OpenID :)

Saludos, Shane

¿Fue útil?

Solución

No puedo hablar con Spring Security junto con Google App Engine, pero puedo decir algunas cosas que pueden ser útiles.

Primero, es muy fácil de configurar, y tienen buenos tutoriales para ponerlo en marcha. Personalmente, utilicé el tutorial sobre clínicas para mascotas como guía para Cómo aplicar la seguridad de primavera a mi proyecto la primera vez. Pude configurarlo en una hora o dos y tenía seguridad básica al usar mi base de datos en unas pocas páginas diferentes. Su millaje puede variar, por supuesto, pero en el peor de los casos, tiene su tutorial completo que puede empujar y empujar para ver cómo reacciona.

En segundo lugar, la biblioteca es muy configurable. Si busca en el manual usted Obtendré una buena idea de lo que puede hacer y no tuve problemas para volver a trabajar las áreas que necesitaba cambiar para mi proyecto. Tengo confianza en que debería poder trabajar en conjunto con Spring Security y Google App Engine. En general, estoy satisfecho con la previsión y la capacidad de Spring source para interactuar con otras bibliotecas.

Finalmente, Spring Security admite OpenID si es algo que decides colocar en capas. Aún no he jugado con esta parte, pero en el tutorial también parece bastante intuitivo. Lo bueno aquí es que debería poder agregar eso después del hecho si resulta que debería haber soportado OpenID después de todo.

¡Te deseo la mejor de las suertes!

Otros consejos

Me topé con tu publicación. Parecía (en tiempo pasado ya que ha pasado mucho tiempo) confundido acerca del uso y la autenticación de HTTP / HTTPS. Si está utilizando HTTP, su contraseña no se está rebotando en texto sin formato. Normalmente, la información de inicio de sesión se publica a través de HTTPS. En este momento, se ha establecido una sesión, que se rastrea a través de un gran identificador generado aleatoriamente en una cookie. El usuario se autentica en el servidor y su ID se almacena en la sesión (almacenada en el servidor) para marcar que se ha iniciado sesión.

A partir de ese momento, se realiza un seguimiento del usuario a través de la sesión. Sí, es posible que un hombre en el medio pueda secuestrar la cookie y asumir su identidad. Este es el caso del 100% de los sitios que funcionan a través de HTTP, pero claramente no es un problema o le gustaría saber más. Para HTTPS, la cookie de sesión puede marcarse como segura, lo que significa que solo se enviará a través de HTTPS desde el navegador. En el pasado, descubrí que los navegadores se comportan de manera diferente, a veces compartiendo el mismo valor para una cookie segura y no segura con el mismo nombre (lo cual es una idea tonta). Su mejor opción es utilizar una cookie segura con el nombre separado para garantizar que el usuario haya iniciado sesión para las funciones seguras en su sitio web.

Estoy de acuerdo contigo en que el marco JAAS es simplemente horrible. Debe haber sido escrito por un grupo de locos sin sentido común.

En cuanto al uso de Google App Engine, ellos se encargarán de toda la autenticación por usted. Parece que no tienes más remedio que usar las cuentas de Google, lo cual es una pena. También es una pena que insistan en que redirecciones a su página de inicio de sesión porque esto rompe la forma en que funciona una aplicación GWT. Actualmente estoy buscando la gestión de mis propias cuentas porque no quiero que Google las posea y no quiero esa experiencia inconexa en mi sitio.

Sin embargo, parece imposible rastrear a un usuario sin una sesión (las sesiones se pueden admitir en GAE, pero no se recomienda enfáticamente para promover la escalabilidad en GAE). Sin una sesión, literalmente necesito enviar la contraseña y autenticar al usuario con cada solicitud de RPC. Google está realizando algunos trucos para hacer que el método getUserPrincipal () funcione en sus clústeres de servidores, y parece que solo obtienes esa magia si utilizas las cuentas de Google.

Tal vez me esté faltando algo, pero los documentos de Google simplemente hojean este enorme agujero :(

Hola, si quieres trabajar con Java, deberías buscar WICKET ... eso es un bonito java-framework que ofrece mucho. está orientado a los componentes y, a través de los ejemplos, es bastante fácil de entender (vea el ejemplo de inicio de sesión en la página de ejemplo extendida ... Lo tengo corriendo muy rápido). También funciona con otros js-frameworks, pero también ofrece su propia implementación ajax. ¡También tiene una gran lista de correo!

Estoy tratando de hacer lo mismo usando elemento de restricción de seguridad del servlet . En mi solicitud, basic / digest auth en https está bien.

Al día siguiente, también intentaré implementar otra aplicación utilizando restlet y / o JAX-RS. Ambos marcos proporcionan enlaces de seguridad.

  

Entrar / salir (seguir) una sesión (sesión iniciada / sesión cerrada).

esto se puede implementar fácilmente usando un filtro de servlet (de nuevo, totalmente compatible con GAE)

  

Como nota al margen, ¿alguien ha tenido suerte con Spring.Security en Google App Engine?

la seguridad del resorte es compatible

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top