¿Cuál es la mejor manera de proveer seguridad a una aplicación de JSF 2 puro?

Primero, a leer:
Contextualizándose, el histórica y seguridad a nivel de lenguaje Java >> (e-dit!)
Y ya que los links a Sun están rotos, de hacha a JAASRefGuide (e-dit!)
Dada la coincidencia de clases entre JAAS y la seguridad nativa, creo poder responderme la primera pregunta
¿cómo darle valor al Principal, etc, del SessionContext de EJB: a través de JAAS.
Por otro lado, cómo enlazo los Permission de JAAS con mis propios permisos en DB, ¿a través de la implementación BD del LoginModule? De ser así, ¿tiene que tener alguna forma específica?
Eso es lo que se llama ‘access control context’… pero los Policys parecen ser archivos de texto, quizás implementando la interfaz Permission?
Respecto a los CallBackHandler, no hay que olvidar que JAAS no necesariamente está pensado para entorno Web, y de hecho las implementaciones básicas son en consola; por lo tanto otro asunto a considerar es cómo conectar al momento del login los campos del formulario al LoginContext.
En seguida, tutoriales de Autentificación y Autorización.
La Autorización es para ejecutar acciones de Java, que no es lo mismo que yo necesito salvo quizás en la capa de negocio, en donde tendría que escribir código extra para cada acción?
Lo que me propongo: para todos los tipos de login poder llenar el Principal y en base a eso filtrar los JSF y, eventualmente, la invocación de Beans. O sea, más o menos exactamente ESTO
Y aquí está la sección de seguridad en aplicaciones Web, veamos… (e-dit: Servlets 3.0) por aquí iría la cosa -> @ServletSecurity @HttpConstraint
definitivamente voy a necesitar form-based authentication
La última pregunta era quién se encargaba de mapear los subjects y credenciales, por ejemplo, contra la base de datos y ese es el rol de JAAS cuya interfaz LoginModule tenemos que implementar

Ahora, el paso a paso:

1.Necesito decirle a la aplicación que le estoy aplicando seguridad, eso se hace en el web.xml según vemos aquí

<security-constraint>
 <web-resource-collection>
 <web-resource-name>Nombre</web-resource-name>
 <url-pattern>/la_url_que_quiero_proteger</url-pattern>
 </web-resource-collection>

<auth-constraint>
 <role-name>Administrador</role-name>
 </auth-constraint>
 </security-constraint>

<!-- donde mismo defino los roles -->
 <security-role>
 <role-name>Administrador</role-name>
 </security-role>

<!-- le indico que no quiero un prompt sino una página de login-->
 <login-config>
 <auth-method>FORM</auth-method>
 <form-login-config>
 <form-login-page>/faces/login/pagina.xhtml</form-login-page>
 </form-login-config>
 </login-config>

lo cual efectivamente te redirige al login, en seguida, me interesa que al submitir este form con una validación mock me redirija a la página en donde iba: el que el action sea j_security_check significa que va a llamar al CallbackHandler? Probablemente no sin un archivo de configuración de JAAS…

Ahora, ¿dónde va y desde dónde referenciar este archivo? De acuerdo al apéndice B de la referencia, debiera estar en la carpeta /lib/security de mi JRE… pero no está

¿O al yo definir el security-role en web.xml autentificará directo con el realm del servidor y el CallbackHandler sólo funciona programáticamente?

En definitiva, ¿cómo enlazar el formulario con el LoginModule correspondiente? ¿Con un servlet? En ese caso ¿sigue siendo necesario el xml? Nop, pero no se puede dar seguridad a ulr por servlet. La pregunta entonces deviene ¿cómo pasar el login basado en formulario a JAAS?

Una opción sería utilizar las implementaciones de weblogic >> pero ¿cómo usarlas con forms?

Parece que con Authentication Providers

Este sitio utiliza cookies.    Leer más