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 competidoras que eligen algo que no les gusta en alguna otra biblioteca y construyen 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.Inicio de sesión en el sitio web en Java + Google App Engine
Para facilitar mi viaje, he decidido comenzar a aprender Google App Engine + GWT + Java. Me gusta porque es una arquitectura de servidor distribuida lista para usar, y he elegido Java por 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 de JSON, comunicaciones AJAX y generación de HTML. No tardé mucho en crear un pequeño sitio que permite 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 volver al cliente como JSON, donde lo analizo y lo visualizo.
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 sin formato (obviamente). Eso me hizo pensar en todas las cañerías que necesitaría:
- Autentico usuarios contra mi propia base de datos, no de Google. (Iniciar sesión/Perder contraseña/Cerrar sesión)
- Ingresar/salir (rastrear) una sesión (iniciar sesión/cerrar sesión).
- Almacenar datos de usuario en la base de datos de mi aplicación Google.
Todas las cosas bastante estándar que han existido por siempre. Bueno, comencé a buscar una biblioteca de autenticación Java y había bibliotecas grandes y monolíticas con enormes curvas de aprendizaje, y algunas ya son viejas o no están a favor ... ¡Me siento como un programador principiante total de nuevo! ¡Solo quiero tener una página de inicio de sesión! :)
Entonces, comencé a leer sobre cómo funciona la fontanería de la autenticación, y hay una gran cantidad para asimilar. Aparentemente, es bastante común que la gente (insegura) haga rodar la suya. Prefiero tomar una solución que existe y es sólida.
Entonces la pregunta es, ¿qué hace la gente al respecto? Twitter es compatible tanto con HTTP como con HTTPS, pero su API REST se configura de manera predeterminada como HTTP, ¿eso significa que las contraseñas de las personas están volando desprotegidas, listas para ser interceptadas por intermediarios intermedios?
También miré a OAuth, que se ve excelente, pero no tiene un caso para un buen viejo "No quiero saber o me importa lo que OpenID es". La gente no técnica a la que le he mostrado que OpenID es como "¿qué? Solo quiero poner mi nombre de usuario/contraseña".
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., sino en Java). Me gustaría tener una página de inicio de sesión como Digg, incluso con una opción de un día para OpenID :)
Saludos, Shane
Gracias por sus comentarios, voy a cavar más profundo. Una cosa, ¿tengo que tomar todo el marco Spring, o puedo tomar el lado de la seguridad? Es solo que no quiero tener que aprender una gran biblioteca para usar una sola pieza. Si tengo que hacerlo, entonces que así sea, pero me pregunto por adelantado. – Shane
Puede elegir entre las diversas bibliotecas de Spring Framework. Por lo general, juegan bien entre ellos, o con la mayoría de las otras bibliotecas que he visto también. Según entiendo, puede aplicar capas en Spring Security con otros frameworks, y lo hacemos localmente (técnicamente todavía estamos en Acegi, pero lo que sea), y funciona bien. –