JAAS para seres humanos

83

Estoy teniendo dificultades para entender JAAS. Todo parece más complicado de lo que debería ser (especialmente los tutoriales de Sun). Necesito un tutorial simple o un ejemplo sobre cómo implementar la seguridad (autenticación + autorización) en una aplicación java basada en Struts + Spring + Hibernate con un repositorio de usuarios personalizado. Se puede implementar usando ACEGI.

Dan
fuente
Pregunta impresionante. Gran título conciso para una falla de documentación legítima.
Guido Anselmi
Mejor sesión de preguntas y respuestas sobre JAAS. Me ha costado mucho empezar con eso.
cristiandley
@mattb, me gustaría hacer un apéndice, si es posible. Creo que mi respuesta puede ayudar a comprender su pregunta. Diciendo conceptualmente.
pss1suporte

Respuestas:

23

Estos son algunos de los enlaces que utilicé para ayudar a comprender JAAS:

http://www.owasp.org/index.php/JAAS_Tomcat_Login_Module

http://www.javaworld.com/jw-09-2002/jw-0913-jaas.html

http://jaasbook.wordpress.com/

http://roneiv.wordpress.com/2008/02/18/jaas-authentication-mechanism-is-it-possible-to-force-j_security_check-to-go-to-a-specific-page/

También eche un vistazo a los procedimientos de configuración de dominios de Apache tomcat:

http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html

Martlark
fuente
3
El vínculo para jaasbook está muerto. Ahora se ha trasladado a jaasbook.wordpress.com
Eric B.
@Martlark, me gustaría hacer un apéndice, si es posible. Creo que mi respuesta puede ayudar a comprender su respuesta. Diciendo conceptualmente.
pss1suporte
51

Otros usuarios han proporcionado algunos enlaces muy útiles arriba, así que no me voy a molestar con los enlaces. Hice una investigación similar en JAAS para aplicaciones web y me encontré con un "obstáculo mental" hasta que finalmente me di cuenta de que JAAS es un marco que aborda la seguridad en una "capa" diferente a las aplicaciones web en Java World. Está diseñado para abordar problemas de seguridad en Java SE, no en Java EE.

JAAS es un marco de seguridad creado para proteger las cosas a un nivel mucho más bajo que la aplicación web. Algunos ejemplos de estas cosas son el código y los recursos disponibles en el nivel de JVM, de ahí la capacidad de configurar archivos de políticas en el nivel de JVM.

Sin embargo, dado que Java EE está construido sobre Java SE, algunos módulos de JAAS se reutilizaron en la seguridad de Java EE, como LoginModules y Callbacks.

Tenga en cuenta que además de la seguridad Java EE, también existe la seguridad Spring (antes conocida como Acegi), que similar a la seguridad nativa Java EE aborda una "capa" mucho más alta en el problema de la seguridad de las aplicaciones web. Es una implementación de seguridad separada y no se basa en la seguridad estándar de Java EE, aunque se comporta de manera similar en muchos aspectos.

En resumen, a menos que esté buscando asegurar recursos en el nivel de Java SE (clases, recursos del sistema), no veo ningún uso real de JAAS que no sea el uso de la clase y las interfaces comunes. Solo concéntrese en usar Spring Security o la antigua seguridad Java EE, que resuelven muchos problemas comunes de seguridad de aplicaciones web.

lsiu
fuente
2
El tutorial de Java EE 6 asume la comprensión de los conceptos básicos de seguridad, por lo que una pequeña descripción general de JAAS no estará de más.
jacktrades el
¡La mejor explicación sobre JAAS!
David Hofmann
@isiu, me gustaría hacer un apéndice, si es posible. Creo que mi respuesta puede ayudar a comprender su respuesta. Diciendo conceptualmente.
pss1suporte
11

javax.security es en mi humilde opinión una API demasiado complicada. Como resultado, hay implementadores no solo de LoginModules, sino de toda la API de autenticación y autorización, que crea la capa de abstracción anterior, como los administradores de autenticación y autorización.

Para empezar, es bueno imprimir esto en su memoria.

En segundo lugar, en mi humilde opinión, la biblioteca de configuración e inicio más simple para JAAS es Jboss PicketBox . Dice cómo realizar la autenticación y autorización a través de JBossAuthenticationManager y JBossAuthorizationManager ... Fácilmente configurable mediante XML o Anotaciones. Puede usarlo para administrar tanto aplicaciones web como aplicaciones independientes.

Si necesita la parte de autorización para administrar el acceso al repositorio, en términos de ACL para recursos, esto es lo que está buscando con seguridad.

El problema con la seguridad es que, por lo general, debe personalizarlo según sus necesidades, por lo que puede terminar implementando:

LoginModule : verifica el nombre de usuario + contraseña

CallbackHandler se usa asínew LoginContext("Sample", new MyCallbackHandler());

CallbackHandler se pasa a los LoginModules subyacentes para que puedan comunicarse e interactuar con los usuarios, solicitando un nombre de usuario y una contraseña a través de una interfaz gráfica de usuario, por ejemplo. Entonces, dentro del Handler, obtiene el nombre de usuario y la contraseña del usuario y se pasa al LoginModule.

LoginContext - entonces simplemente llame a lc.login (); y autenticar las credenciales. LoginContext se completa con el Asunto autenticado.

Sin embargo, Jboss picketbox le ofrece una forma realmente fácil de hacerlo, a menos que necesite algo específico.

lisak
fuente
8

La respuesta de lsiu es una de las pocas respuestas aquí que realmente "lo entiendo";)

Además de esa respuesta, una muy buena referencia sobre este tema es ¿ Qué pasó con JAAS? .

Explica cómo JASPIC es el enlace en Java EE entre los modelos de seguridad Servlet y EJB y potencialmente un módulo de inicio de sesión JAAS, pero que en muchos casos el rol de JAAS se reduce al de un nombre de usuario y proveedor de roles relativamente simple en Java EE.

Del mismo autor es JAAS in the Enterprise , que es un artículo más antiguo pero proporciona muchos antecedentes históricos sobre por qué los modelos Java SE (JAAS) y Java EE divergieron de la forma en que lo hicieron.

En general, pero algunos tipos de JAAS se utilizan directamente en Java EE, básicamente Principal, Subjecty CallbackHandler. Los dos últimos son utilizados principalmente por JASPIC. Expliqué JASPIC en el artículo Implementación de la autenticación de contenedor en Java EE con JASPIC .

Arjan Tijms
fuente
1

Para obtener un tutorial puramente JAAS, consulte esto . Es antiguo, pero debería ayudar con los conceptos básicos de JAAS.

marca
fuente