2011-12-07 20 views
7

Me gustaría saber cómo combinar estos dos pasos de autenticación:JAAS LoginModules adicionales

  1. cheque el usuario/contraseña en un LDAP
  2. añadir directores (roles) que se encuentran en una base de datos para el sujeto.

El repositorio de usuarios de LDAP no tiene idea acerca de los roles específicos de la aplicación y no quiero administrar las contraseñas en el DB de la aplicación. Entonces necesito ambos.

archivo de configuración JAAS permite tener LoginModules adicionales:

<name used by application to refer to this entry> { 
    <LoginModule> <flag> <LoginModule options>; 
    <optional additional LoginModules, flags and options>; 
}; 

pero no puedo encontrar ejemplo que explica cómo funciona la I.

¿Es el buen método?

Gracias

=========================================

Aquí es mi respuesta:

De hecho podemos tener LoginModules adicionales. El archivo de configuración JAAS es:

Sample { 
    com.sun.security.auth.module.LdapLoginModule Requisite 
    userProvider="ldap://acme.org:389/OU=Users,OU=_ACME,DC=acmegis,DC=acme,DC=org" 
    authIdentity="{USERNAME}" 
    userFilter="(userPrincipalName={USERNAME})" 
    storePass=true 

    sample.module.SampleLoginModule required debug=true; 
}; 

Aquí tenemos dos LoginModules:

LdapLoginModule del Sol que comprueba de usuario/contraseña, y el mío sample.module.SampleLoginModule que consultar mi db y llena los directores. El parámetro importante es storePass = true que solicita al LdapLoginModule que almacene el nombre de usuario y la contraseña en el estado compartido del módulo. (ver http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html).

Para que los siguientes LoginModules puedan obtener el nombre de usuario pasado al método de inicialización en el argumento de SharedState Map. No deberían tener nada que hacer en el inicio de sesión() y la consulta en DB para llenar los Principales se hace en commit() (como dijo Shimi Bandiel).

No lo uso todavía pero hay un DatabaseServerLoginModule desarrollado por JBoss (ver http://community.jboss.org/wiki/DatabaseServerLoginModule) que admite autenticación y asignación de roles. Usado con el apilamiento de contraseñas = useFirstPass deberíamos tener la respuesta a mi necesidad sin escribir ningún código de línea (sino un hermoso archivo de configuración de JAAS).

B.R.

Respuesta

1

Debe implementar un LoginModule que en el método login acceda al LDAP y verifique el nombre de usuario/contraseña y en el método commit acceda al DB y complete los principales.
No es necesario utilizar múltiples LoginModule

+0

Gracias por su respuesta. Pero "com.sun.security.auth.module.LdapLoginModule" ya verifica el usuario/contraseña a través de LDAP, no quiero reescribirlo. Echa un vistazo a mi respuesta y deja un comentario (si quieres). B.R. – kiki

0

¡Es genial! Pero implementar el LoginModule le da más poder para personalizar la forma en que interactúa con el servidor LDAP.
También me cuesta el mismo problema que tú. Pero recuerde que cuando implemente el LoginModule, debe agregar el rol en la función login(), no en commit(), de lo contrario su materia no obtendrá el principal.