El Servicio de Autenticación y Autorización de Java , o JAAS , pronunciado "Jazz", [ 1 ] es la implementación en Java del marco de seguridad de la información estándar del Módulo de Autenticación Conectable (PAM) . [ 2 ] JAAS se introdujo como una biblioteca de extensión para la Plataforma Java, Edición Estándar 1.3 y se integró en la versión 1.4. [ 1 ]
El objetivo principal de JAAS es separar las responsabilidades de la autenticación de usuarios para que puedan gestionarse de forma independiente. Mientras que el mecanismo de autenticación anterior contenía información sobre el origen del código y quién lo firmó, JAAS añade un indicador sobre quién ejecuta el código. Al extender los vectores de verificación, JAAS amplía la arquitectura de seguridad para aplicaciones Java que requieren módulos de autenticación y autorización .
Administración
Para el administrador del sistema , JAAS consta de dos tipos de archivos de configuración :
*.login.conf: especifica cómo integrar módulos de inicio de sesión proporcionados por el proveedor en aplicaciones específicas.*.policy: especifica qué identidades (usuarios o programas) tienen qué permisos.
Por ejemplo, una aplicación puede tener este archivo login.conf que indica cómo se deben ejecutar los diferentes mecanismos de autenticación para autenticar al usuario:
Aplicación para tienda de mascotas { com.sun.security.auth.module.LdapLoginModule suficiente; com.foo.SmartcardLoginModule requerido; com.sun.security.auth.module.UnixLoginModule requerido debug=true; }Interfaz de la aplicación
Para el desarrollador de aplicaciones, JAAS es una biblioteca estándar que proporciona:
- una representación de la identidad ( Principal ) y un conjunto de credenciales ( Sujeto )
- Un servicio de inicio de sesión que invocará las funciones de devolución de llamada de tu aplicación para solicitar al usuario información como el nombre de usuario y la contraseña . Devuelve un nuevo Subject.
- un servicio que comprueba si un usuario ha recibido un permiso de un administrador.
Integración de sistemas de seguridad
Para el integrador de sistemas de seguridad, JAAS proporciona las siguientes interfaces:
- para proporcionar su espacio de nombres de identidad a las aplicaciones
- adjuntar credenciales a los hilos ( Asunto )
- para desarrollar módulos de inicio de sesión . Su módulo invoca funciones de devolución de llamada para consultar al usuario, verifica su respuesta y genera un Subject .
Módulos de inicio de sesión
Los módulos de inicio de sesión se ocupan principalmente de la autenticación en lugar de la autorización y forman un componente ampliamente utilizado de JAAS. [ 3 ] Se requiere un módulo de inicio de sesión para implementar la javax.security.auth.spi.LoginModuleinterfaz, que especifica los siguientes métodos:
Nota: A Subjectes el usuario que está intentando iniciar sesión.
- inicializar: Código para inicializar el módulo de inicio de sesión, normalmente almacenando los parámetros pasados en los campos apropiados del
Class. - login: Se comprueban las credenciales proporcionadas mediante una interfaz
Objectque las implementajavax.security.auth.Callback(por ejemplo, consultando una base de datos). Este método puede solicitar al usuario su nombre de usuario y contraseña o utilizar información obtenida previamente. Si se proporcionan credenciales no válidas, sejavax.security.auth.login.FailedLoginExceptiondebe lanzar una excepción (en lugar de devolver falso, lo que indica que se debe ignorar este módulo de inicio de sesión, lo que potencialmente permite que la autenticación se complete con éxito). - commit: Se ha verificado la identidad del sujeto, por lo que el código en este método configura los
PrincipalrolesGroupspara el sujeto autenticado correctamente. Este método debe escribirse con cuidado en aplicaciones empresariales, ya que los servidores de aplicaciones Java EE suelen esperar que las relaciones entre losPrincipalobjetosGroupse configuren de una manera específica. Este método debe lanzar una excepciónjavax.security.auth.login.FailedLoginExceptionsi la autenticación falla (por ejemplo, si un usuario ha especificado un nombre de usuario o contraseña incorrectos). - abort: Se llama si el proceso de autenticación falla. Si este método devuelve false, se ignora este módulo de inicio de sesión.
- cierre de sesión: Código que debe ejecutarse al cerrar la sesión (por ejemplo, podría eliminar el elemento
PrincipaldeSubjecto podría invalidar una sesión web).
Los módulos de inicio de sesión pueden proporcionar inicio de sesión único (SSO) a través de un protocolo/marco SSO específico (por ejemplo , SAML , OpenID y SPNEGO ), pueden verificar la presencia de tokens de seguridad de hardware (por ejemplo, token USB), etc. En una aplicación de n capas, LoginModulespuede estar presente tanto en el lado del cliente como en el lado del servidor.
Módulo de inicio de sesión ( javax.security.auth.spi.LoginModule)
Los módulos de inicio de sesión se escriben implementando esta interfaz; contienen el código para la autenticación. Pueden utilizar diversos mecanismos para autenticar las credenciales del usuario. El código podría recuperar una contraseña de una base de datos y compararla con la contraseña proporcionada al módulo.
Contexto de inicio de sesión ( javax.security.auth.login.LoginContext)
El contexto de inicio de sesión es el núcleo del marco JAAS, que inicia el proceso de autenticación mediante la creación de un Sujeto. A medida que avanza el proceso de autenticación, el Sujeto se completa con diversos principales y credenciales para su posterior procesamiento.
Sujeto ( javax.security.auth.Subject)
Un sujeto representa a un único usuario, entidad o sistema —en otras palabras, un cliente— que solicita autenticación.
Principal ( java.security.Principal)
Un principal representa la esencia de un sujeto. Encapsula características o propiedades de un sujeto. Un sujeto puede contener múltiples principales.
Cartas credenciales
Las credenciales no son más que información sobre el sujeto en cuestión. Pueden ser números de cuenta, contraseñas, certificados, etc. Dado que la credencial representa información importante, las interfaces adicionales pueden ser útiles para crear una credencial adecuada y segura javax.security.auth.Destroyable. javax.security.auth.RefreshableSupongamos que, tras la autenticación exitosa del usuario, se le asigna al sujeto una ID secreta (en forma de credencial) con la que puede ejecutar servicios críticos, pero la credencial debe eliminarse después de un tiempo específico. En ese caso, se podría implementar la Destroyableinterfaz. Refreshablepodría ser útil si una credencial tiene un período de validez limitado.
Véase también
Referencias
- ^ Theodore J. Shrader; Bruce A. rico; Anthony J. Nadalín (2000). Java y seguridad en Internet . iUniverso. pag. 152.ISBN 9780595135004.
- ↑ "Guía de referencia del Servicio de autenticación y autorización de Java (JAAS)" . oracle.com . Oracle Corporation . Archivado del original el 6 de junio de 2012. Consultado el 22 de mayo de 2012 .
- ^ Bhattacharjee, Rahul (abril de 2008). "Tutorial JAAS" . javaranch.com . 7 (1).
Enlaces externos
- jGuard : proyecto de código abierto que puede proteger aplicaciones web o independientes basadas en JAAS. Archivado el 2 de diciembre de 2008 en Wayback Machine.
- Musser, John; Feuer, Paul (23 de septiembre de 2002). "Todo sobre JAAS" . JavaWorld . Recuperado el 20 de julio de 2020 .
- Biblioteca SPNEGO: proyecto de código abierto GNU LGPL que se basa en el marco JAAS para simplificar la autenticación y la autorización.
- API de Java
- Control de acceso informático