tutorial standard google engine app java google-app-engine login

java - standard - web xml tutorial



Inicio de sesiĆ³n del sitio web en Java+Google App Engine (4)

Acabo de tropezar con tu publicación. Parecía (en tiempo pasado, ya que ha pasado mucho tiempo) confundido sobre el uso y la autenticación de HTTP / HTTPS. Si está utilizando HTTP, su contraseña no se rebotará 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 han iniciado sesión.

A partir de ese punto, el usuario es rastreado 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 para el 100% de los sitios que funcionan a través de HTTP, pero es claro que no es un problema o si quiere saber más al respecto. Para HTTPS, la cookie de sesión se puede marcar 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 usar una cookie segura por separado para garantizar que el usuario haya iniciado sesión para funciones seguras en su sitio web.

Estoy de acuerdo con usted en que el marco JAAS es horrible. Debe haber sido escrito por un grupo de lunáticos trastornados sin sentido común.

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

Sin embargo, parece imposible rastrear a un usuario sin una sesión (las sesiones pueden ser compatibles con GAE, pero se desaconseja encarecidamente que promuevan 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á haciendo algunos trucos para que el método getUserPrincipal () funcione en todos sus clústeres de servidores, y parece que solo obtiene esa magia si va con Cuentas de Google.

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

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.

Para facilitar mi viaje, decidí 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.

Bastante simple.

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:

  1. Autenticar a los usuarios contra mi propia base de datos, no de Google. (Iniciar sesión / Contraseña perdida / Cerrar sesión)
  2. Entrar / salir (rastrear) una sesión (iniciar sesión / cerrar sesión).
  3. Almacene los datos del usuario en la base de datos de mi aplicación de Google.

Todo el material estándar que ha 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 las personas (inseguramente) muevan 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 justificación para un buen viejo "No quiero saber ni 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 encantaría tener una página de inicio de sesión como Digg, incluso con una opción para OpenID :)

Saludos, Shane


Hola, si quieres trabajar con Java, quizás quieras mirar a WICKET ... ese es un marco de java bastante bueno que ofrece una gran oferta. 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 ejecuté bastante rápido). también funciona con otros js-frameworks, pero también ofrece su propia implementación de ajax. ¡también tiene una gran lista de correo!


Intento hacer lo mismo utilizando el elemento de restricción de seguridad de servlet. En mi aplicación básica / digest auth bajo https está bien.

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

Entrar / salir (rastrear) una sesión (iniciar sesión / cerrar sesión).

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?

seguridad de primavera es compatible


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

En primer lugar, es muy simple de configurar, y tienen buenos tutoriales para ponerlo en marcha. Personalmente, utilicé el tutorial de clínica de mascotas como una guía sobre cómo aplicar la seguridad de primavera a mi proyecto la primera vez. Logré configurarlo en cuestión de una o dos horas y tuve seguridad básica usando mi base de datos en algunas páginas diferentes. Su kilometraje puede variar, por supuesto, pero en el peor de los casos, si tiene su tutorial completo puede presionar y probar para ver cómo reacciona.

En segundo lugar, la biblioteca es muy configurable. Si busca en el manual obtendrá una buena idea de las cosas que puede hacer, y no tuve problemas para volver a trabajar en las áreas que necesitaba cambiar para mi proyecto. Confío en que debería poder trabajar con Spring Security y Google App Engine juntos. En general, me ha complacido la previsión de la fuente Spring y su capacidad para interactuar con otras bibliotecas.

Finalmente, Spring Security es compatible con OpenID si es algo en lo que usted decide que desea aplicar capas. Todavía no he jugado con esta parte, pero desde el tutorial también parece bastante intuitiva. Lo bueno aquí, es que deberías poder agregar eso después del hecho si resulta que deberías haber soportado OpenID después de todo.

¡Te deseo la mejor de las suertes!