El Servicio de Autenticación y Autorización de Java , o JAAS , pronunciado "Jazz", [1] es la implementación de Java del marco de seguridad de la información del Módulo de Autenticación Conectable (PAM) estándar . [2] JAAS se introdujo como una biblioteca de extensión para la plataforma Java, Standard Edition 1.3 y se integró en la versión 1.4. [1]
JAAS tiene como principal objetivo la separación de las preocupaciones de la autenticación de usuarios para que puedan gestionarse de forma independiente. Si bien el mecanismo de autenticación anterior contenía información sobre dónde se originó el código y quién firmó ese código, JAAS agrega un marcador sobre quién ejecuta el código. Al extender los vectores de verificación, JAAS extiende 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 conectar módulos de inicio de sesión proporcionados por el proveedor en aplicaciones particulares*.policy
: especifica qué identidades (usuarios o programas) reciben 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:
PetShopApplication { com.sun.security.auth.module.LdapLoginModule suficiente; com.foo.SmartcardLoginModule requisito; com.sun.security.auth.module.UnixLoginModule required debug = true; }
Interfaz de aplicación
Para el desarrollador de aplicaciones, JAAS es una biblioteca estándar que proporciona:
- una representación de identidad ( Principal ) y un conjunto de credenciales ( Asunto )
- un servicio de inicio de sesión que invocará las devoluciones de llamada de su aplicación para preguntarle al usuario cosas como nombre de usuario y contraseña . Devuelve un nuevo sujeto
- un servicio que prueba si un administrador le otorgó un permiso a un sujeto.
Integración del sistema de seguridad
Para el integrador de sistemas de seguridad, JAAS proporciona interfaces:
- para proporcionar su espacio de nombres de identidad a las aplicaciones
- para adjuntar credenciales a los hilos ( Asunto )
- para desarrollar módulos de inicio de sesión . Su módulo invoca devoluciones de llamada para consultar al usuario, verifica su respuesta y genera un Asunto .
Módulos de inicio de sesión
Los módulos de inicio de sesión se preocupan principalmente por la autenticación en lugar de la autorización y forman un componente de JAAS ampliamente utilizado. Se requiere un módulo de inicio de sesión para implementar la javax.security.auth.spi.LoginModule
interfaz, que especifica los siguientes métodos:
Nota: A Subject
es el usuario que está intentando iniciar sesión.
- initialize: Código para inicializar el módulo de inicio de sesión, generalmente almacenando los parámetros pasados a los campos apropiados de
Class
. - login: Verifique realmente las credenciales proporcionadas a través de un
Object
que implementa lajavax.security.auth.Callback
interfaz (por ejemplo, verifique con una base de datos). Este método podría solicitar al usuario su nombre de usuario y contraseña o podría usar detalles obtenidos previamente. Es importante tener en cuenta aquí que, si se proporcionan credenciales no válidas, sejavax.security.auth.login.FailedLoginException
debe lanzar un (en lugar de devolver falso, lo que indica que este módulo de inicio de sesión debe ignorarse, lo que potencialmente permite que la autenticación sea exitosa). - commit: La identidad del sujeto ha sido verificada, por lo que el código en este método configura los
Principal
yGroups
(roles) para el sujeto autenticado exitosamente. Este método tiene que ser escrito cuidadosamente en aplicaciones empresariales como servidores de aplicaciones Java EE menudo esperan que las relaciones entre elPrincipal
yGroup
los objetos que se creará de una manera determinada. Este método debería generar unjavax.security.auth.login.FailedLoginException
error si la autenticación falla (por ejemplo, un usuario ha especificado un nombre de usuario o contraseña incorrectos). - abortar: se llama si falla el proceso de autenticación. Si este método devuelve falso, este módulo de inicio de sesión se ignora.
- logout: Código que debe ejecutarse al cerrar la sesión (por ejemplo, podría eliminar el
Principal
deSubject
o 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 en particular (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 niveles , LoginModules
puede estar presente tanto en el lado del cliente como en el lado del servidor.
LoginModule ( javax.security.auth.spi.LoginModule
)
Los módulos de inicio de sesión se escriben implementando esta interfaz; contienen el código real para la autenticación. Puede utilizar varios 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.
LoginContext ( 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 rellena con varios principales y credenciales para su posterior procesamiento.
Asunto ( javax.security.auth.Subject
)
Un sujeto representa a un solo usuario, entidad o sistema –en otras palabras, un cliente– que solicita autenticación.
Principal ( java.security.Principal
)
Un director representa el rostro de un sujeto. Encapsula características o propiedades de un sujeto. Un tema puede contener varios principios.
Cartas credenciales
Las credenciales no son más que piezas de información sobre el tema en consideración. Pueden ser números de cuenta, contraseñas, certificados, etc. Como la credencial representa información importante, las interfaces adicionales pueden ser útiles para crear una credencial adecuada y segura, javax.security.auth.Destroyable
y javax.security.auth.Refreshable
. Suponga que después de la autenticación exitosa del usuario, usted completa el sujeto con una identificación secreta (en forma de credencial) con la que el sujeto puede ejecutar algunos servicios críticos, pero la credencial debe eliminarse después de un tiempo específico. En ese caso, es posible que desee implementar la Destroyable
interfaz. Refreshable
puede ser útil si una credencial tiene solo un período de tiempo limitado en el que es válida.
Ver también
Referencias
- ↑ a b Theodore J. Shrader; Bruce A. Rich; Anthony J. Nadalin. Seguridad en Java e Internet . pag. 152.
- ^ "Guía de referencia del servicio de autenticación y autorización de Java (JAAS)" . oracle.com . Oracle Corporation . Archivado desde el original el 26 de septiembre de 2012 . Consultado el 22 de mayo de 2012 .
enlaces externos
- Tutorial de JAAS
- jGuard: proyecto de código abierto que puede proteger aplicaciones web o independientes basadas en JAAS
- Musser, John; Feuer, Paul (23 de septiembre de 2002). "Todo eso JAAS" . JavaWorld . Consultado el 20 de julio de 2020 .
- Biblioteca SPNEGO: proyecto GNU LGPL de código abierto que se basa en el marco JAAS para simplificar la autenticación y la autorización