WebSphere Application
Server da soporte al modelo de seguridad declarativa Java™
EE (Java Platform, Enterprise Edition). Puede definir la política de
autenticación y control de acceso utilizando el descriptor de despliegue
Java EE. Asimismo, puede apilar módulos de inicio de sesión personalizados para personalizar
el mecanismo de autenticación de WebSphere Application Server.
Antes de empezar
Un módulo de inicio de sesión personalizado puede realizar la correlación de
principales y credenciales, el proceso de señales de seguridad personalizadas y de
credenciales personalizadas, y el manejo de errores, entre otras posibilidades. Normalmente, no es necesario
utilizar el código de aplicación para ejecutar la función de autenticación. Si tiene que ejecutar la función de autenticación en el código de aplicación,
utilice las técnicas de programación que se describen en este apartado. Utilice la seguridad declarativa como regla; utilice
las técnicas que se describen en este apartado como último recurso.
Acerca de esta tarea
Si la opción de inicio de sesión único (SSO) del mecanismo LTPA (Lightweight Third-Party Authentication) está habilitado, una vez conectado, la sesión de inicio de sesión del cliente web es rastreada por una cookie de símbolo SSO LTPA.
Cuando termina la sesión, este símbolo se suprime para terminar la sesión de inicio de sesión, pero no se suprime el sujeto del servidor. Cuando se utiliza el modelo de seguridad declarativa, el contenedor Web de
WebSphere Application
Server realiza automáticamente la autenticación de cliente y la gestión de la sesión de inicio de sesión. Para realizar la
autenticación en el código de la aplicación, establezca una
página de inicio de sesión sin una restricción de seguridad Java EE y dirija primero las solicitudes
de cliente a su página de inicio de sesión. La página de inicio
de sesión puede utilizar el modelo de programación JAAS (Java Authentication
and Authorization Service) para realizar la autenticación.
Para habilitar los módulos de inicio de sesión Web de
WebSphere Application
Server para generar cookies SSO, utilice los pasos siguientes.
Procedimiento
- Cree una nueva configuración JAAS de inicio de sesión del sistema. Para acceder al panel, pulse Seguridad > Seguridad global. En Java Authentication and Authorization Service,
pulse Inicios de sesión del sistema.
- Clone manualmente la configuración de inicio de sesión WEB_INBOUND y asígnele un alias nuevo. Para clonar la configuración de inicio de sesión, pulse Nuevo, escriba un nombre para la configuración, pulse Aplicar y pulse Módulos de inicio de sesión JAAS en Propiedades adicionales. Pulse Nuevo y configure el módulo de inicio de sesión JAAS. Para obtener más información, consulte Valores de módulo de inicio de sesión para Java Authentication and Authorization Service. El contenedor Web de
WebSphere Application
Server utiliza la configuración de inicio de sesión WEB_INBOUND para autenticar clientes web.
Si cambia la
configuración de inicio de sesión WEB_INBOUND, afectará a todas las aplicaciones web
de la célula. Debe crear su propia configuración de inicio de sesión clonando el
contenido de la configuración de inicio de sesión WEB_INBOUND.
- Seleccione el módulo de inicio de sesión wsMapDefaultInboundLoginModule y pulse Propiedades personalizadas. Hay dos módulos de inicio de sesión definidos en la configuración de inicio de sesión: ltpaLoginModule y wsMapDefaultInboundLoginModule.
- Añada un nombre de propiedad de inicio de sesión cookie con un valor
true.
Los dos módulos de inicio de sesión están habilitados para generar cookies SSO LTPA. No añada la opción de inicio de sesión de cookie a la configuración de inicio de sesión WEB_INBOUND original.
- Apile los LoginModules personalizados en la nueva configuración de inicio de
sesión (opcional).
- Utilice la página de inicio de sesión para el inicio de sesión mediante JAAS LoginContext.login utilizando la configuración de inicio de sesión que acaba de definir.
Una vez conectado, el ltpaLoginModule o el
wsMapDefaultInboundLoginModule generará una cookie SSO LTPA cuando una
autenticación sea satisfactoria. Qué LoginModule exacto genera la cookie SSO depende
de varios factores, incluida la configuración de autenticación del sistema y la
condición de tiempo de ejecución (que se sale fuera del ámbito de este apartado).
- Llame al método WSSubject.setRunAsSubject modificado para añadir el
sujeto a la memoria caché de autenticación. Debe tratarse de un sujeto
JAAS de WebSphere Application
Server creado por LoginModule. Si añade el sujeto a
la antememoria de autenticación, se vuelve a crear un sujeto a partir del símbolo
SSO.
- Utilice la página de cierre de sesión programático para revocar las cookies SSO invocando
el método revokeSSOCookies de la clase WSSecurityHelper.
El
término "cookies" se utiliza porque
WebSphere
Application Server Versión 5.1.1 y superiores dan soporte a una señal SSO LTPA nueva con
un algoritmo de cifrado diferente, pero se puede configurar para generar la señal SSO
LTPA original para la compatibilidad con versiones anteriores. Tenga en cuenta que el sujeto continúa en la memoria caché de
autenticación y sólo se revocan las cookies SSO.
Deprecated feature: El método
revokeSSOCookies(HttpServletRequest, HttpServletResponse) de la clase WSSecurityHelper
está en desuso.
Utilice la funcionalidad proporcionada por el método logout() de Java Servlet-3.0.
Consulte
Métodos de seguridad de servlet.
depfeat
Ejemplo
Utilice el siguiente ejemplo de código para realizar la autenticación.
Avoid trouble: Si establece la contraseña para la clase de fábrica WSCallbackHandlerFactoryset para obtener manejadores en
null,
como se realiza en el siguiente ejemplo, permite una aserción de identidad sin una contraseña.
gotcha
Supongamos que ha escrito un LoginServlet.java:
Importe com.ibm.wsspi.security.auth.callback.WSCallbackHandlerFactory;
Importe com.ibm.websphere.security.auth.WSSubject;
public Object login(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
PrintWriter out = null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e){
// Manejo de errores }
Subject subject = null;
try {
LoginContext lc = new LoginContext("system.Your_login_configuration",
WSCallbackHandlerFactory.getInstance().getCallbackHandler(
userid, null, password, req, res, null));
lc.login();
subject = lc.getSubject();
WSSubject.setRunAsSubject(subject);
} catch(Exception e) {
// capture todas las excepciones posibles si lo desea o manéjelas por
separado
out.println("Exception in LoginContext login + Exception = " +
e.getMessage());
throw new ServletException(e.getMessage());
}
A continuación se proporciona un código de ejemplo para revocar las cookies SSO
al finalizar la sesión de programación:
The LogoutServlet.java:
public void logout(HttpServletRequest req, HttpServletResponse res,
Object retCreds) throws ServletException {
PrintWriter out =null;
try {
out = res.getWriter();
res.setContentType("text/html");
} catch (java.io.IOException e){
// Manejo de errores
}
try {
WSSecurityHelper.revokeSSOCookies(req, res);
} catch(Exception e) {
// capture todas las excepciones posibles si lo desea o manéjelas por
separado
out.println("JAASLogoutServlet: logout Exception = " + e.getMessage());
throw new ServletException(e);
}
}