Inicio de sesión mediante programa para JAAS

El inicio de sesión programado es un tipo de inicio de sesión con formulario que da soporte a los formularios de inicio de sesión específicos del sitio de presentación de aplicaciones para fines de autenticación.

En caso de que las aplicaciones de cliente de enterprise bean exijan que el usuario proporcione información de identificación, el autor de la aplicación debe reunir esa información y autenticar al usuario. El trabajo del programador puede clasificarse de forma general en función del lugar en el que se realiza la autenticación del usuario:

Se puede solicitar a los usuarios de aplicaciones web que proporcionen datos de autenticación de muchas maneras. El elemento <login-config> que se encuentra en el archivo del descriptor de despliegue de la aplicación Web define el mecanismo que se utiliza para reunir esta información. Los programadores que prefieran personalizar los procedimientos de inicio de sesión y no depender de dispositivos generales como una ventana de diálogo 401 en un navegador, pueden utilizar el inicio de sesión basado en formularios para proporcionar un formulario HTML específico de la aplicación para reunir información de inicio de sesión.

No se realiza ninguna autenticación a menos que esté habilitada la seguridad administrativa. Si quiere hacer uso del inicio de sesión basado en formularios para las aplicaciones web, debe especificar FORM en el distintivo del método de autenticación del elemento <login-config> que se encuentra en el descriptor de despliegue de cada aplicación web.

Las aplicaciones pueden presentar formularios de inicio de sesión específicos del sitio utilizando el tipo de inicio de sesión mediante formulario de WebSphere Application Server. La especificación Java™ Platform, Enterprise Edition (Java EE) define el inicio de sesión mediante formulario como uno de los métodos de autenticación para las aplicaciones web. WebSphere Application Server proporciona un mecanismo de fin de sesión mediante formulario.

Inicio de sesión mediante programa de JAAS (Java Authentication and Authorization Service)

El servicio JAAS (Java Authentication and Authorization Service) es una nueva característica de WebSphere Application Server. También se rige por la especificación Java EE 1.4. JAAS es una colección de interfaces de programas de aplicación (API) de autenticación estratégica que sustituyen a las API de inicio de sesión mediante programa de CORBA (Common Object Request Broker Architecture). WebSphere Application Server proporciona algunas extensiones a JAAS:

Antes de empezar el desarrollo con las API de inicio de sesión mediante programa, tenga en cuenta los siguientes puntos:
  • Para la aplicación de cliente Java puro o la aplicación de contenedor de cliente, inicialice la seguridad ORB (Object Request Broker) de cliente antes de realizar un inicio de sesión JAAS. Para ello, ejecute el siguiente código antes del inicio de sesión JAAS:
    ...
    import java.util.Hashtable;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    ...
    // Ejecute una búsqueda de InitialContext y una búsqueda por omisión antes de 
    // conectarse para inicializar la seguridad ORB y para que se determine el puerto/ 
    // host de rutina de carga para la búsqueda SecurityServer. Si no desea 
    // validar el ID de usuario/contraseña durante el inicio de sesión JAAS, inhabilite la 
    // propiedad com.ibm.CORBA.validateBasicAuth en el archivo 
    // sas.client.props.
    
    Hashtable env = new Hashtable();
    env.put(Context.INITIAL_CONTEXT_FACTORY, 
        "com.ibm.websphere.naming.WsnInitialContextFactory");
    env.put(Context.PROVIDER_URL, 
         "corbaloc:iiop:myhost.mycompany.com:2809");
    Context initialContext = new InitialContext(env);
    Object obj = initialContext.lookup("");
    [z/OS]Nota: Establezca com.ibm.CORBA.validateBasicAuth=false siempre que se conecte a un servidor z/OS. Actualmente esta función no funciona correctamente desde un cliente distribuido a un servidor z/OS ya que SecurityServer se localiza mediante el principal "UNAUTHENTICATED", que no se acepta en el sistema z/OS.
  • Para la aplicación de cliente Java puro o la aplicación de contenedor de cliente, asegúrese de que el nombre de host y el número de puerto de las propiedades de rutina de carga JNDI (Java Naming and Directory Interface) de destino estén especificados correctamente. Consulte el apartado Desarrollo de aplicaciones que utilizan CosNaming (Interfaz de denominación CORBA) para obtener más información.
  • Si la aplicación utiliza la configuración de inicio de sesión JAAS personalizada, asegúrese de que la configuración de inicio de sesión JAAS personalizada esté definida correctamente. Consulte la sección Configuración de inicios de sesión mediante programa para JAAS (Java Authentication and Authorization Service) para obtener más información.
  • Algunas de las API JAAS están protegidas por permisos de seguridad de Java 2. Si el código de aplicación utiliza estas API, asegúrese de que se han añadido estos permisos al archivo was.policy de la aplicación. Consulte los detalles en las secciones Adición del archivo was.policy a las aplicaciones para la seguridad de Java 2, Utilización de PolicyTool para editar archivos de política para la seguridad de Java 2 y Configuración del archivo was.policy para la seguridad de Java 2. Si desea saber qué API están protegidas por permisos de seguridad de Java 2, consulte el IBM® Developer Kit, Java Technology Edition; y la documentación de API públicas de WebSphere Application Server y JAAS. En la siguiente lista se incluyen las API que se utilizan en los ejemplos de código que se proporcionan en esta documentación.
    • Los constructores javax.security.auth.login.LoginContext están protegidos por javax.security.auth.AuthPermission "createLoginContext".
    • javax.security.auth.Subject.doAs y com.ibm.websphere.security.auth.WSSubject.doAs están protegidos por javax.security.auth.AuthPermission "doAs".
    • javax.security.auth.Subject.doAsPrivileged y com.ibm.websphere.security.auth.WSSubject.doAsPrivileged están protegidos por javax.security.auth.AuthPermission "doAsPrivileged".
  • com.ibm.websphere.security.auth.WSSubject: debido a un error de diseño en JAAS Versión 1.0, javax.security.auth.Subject.getSubject no devuelve el Sujeto asociado con la hebra en ejecución dentro de un bloque de código java.security.AccessController.doPrivileged. Esto puede dar lugar a errores de coherencia, por lo que se necesitará un trabajo adicional para solucionarlos. La API com.ibm.websphere.security.auth.WSSubject proporciona una solución alternativa que permite asociar el sujeto con la hebra en ejecución. La API com.ibm.websphere.security.auth.WSSubject amplía el modelo JAAS a los recursos Java EE para las comprobaciones de autorización. El Sujeto que se asocia con la hebra en ejecución dentro del bloque de código com.ibm.websphere.security.auth.WSSubject.doAs o com.ibm.websphere.security.auth.WSSubject.doAsPrivileged se utiliza en las comprobaciones de autorización de recursos Java EE.
  • Soporte de consola administrativa para definir la nueva configuración de inicio de sesión JAAS: la configuración de inicio de sesión JAAS se puede configurar en la consola administrativa y almacenar en la API de configuración de WebSphere Application Server. Las aplicaciones pueden definir la nueva configuración de inicio de sesión JAAS en la consola administrativa y los datos persisten en el depósito de configuración que se almacena con la API de configuración de WebSphere Application Server. No obstante, WebSphere Application Server continúa dando soporte al formato de configuración de inicio de sesión JAAS por omisión que proporciona la implementación por omisión de JAAS. Si hay configuraciones de inicio de sesión duplicadas definidas en formato de archivo de texto plano y en la API de configuración de WebSphere Application Server, la configuración de inicio de sesión de WebSphere Application Server tiene prioridad. Las ventajas de definir la configuración de inicio de sesión en la API de configuración de WebSphere Application Server son:
    • La definición de la configuración de inicio de sesión JAAS con la consola administrativa.
    • La gestión central de la configuración de inicio de sesión JAAS.
    • La distribución de la configuración de inicio de sesión JAAS en una instalación de WebSphere Application Server, Network Deployment.
  • Configuraciones de inicio de sesión JAAS de WebSphere Application Server: WebSphere Application Server proporciona configuraciones de inicio de sesión JAAS a las aplicaciones para realizar la autenticación mediante programa en el tiempo de ejecución de seguridad de WebSphere Application Server. Estas configuraciones de inicio de sesión JAAS de WebSphere Application Server realizan la autenticación en el mecanismo de autenticación configurado, SWAM (Simple WebSphere Authentication Mechanism) o LTPA (Lightweight Third-Party Authentication), y el registro de usuarios (local OS, LDAP o Personalizado), a partir de los datos de autenticación suministrados. El Sujeto autenticado de estas configuraciones de inicio de sesión JAAS contiene el principal y las credenciales necesarias que puede utilizar el tiempo de ejecución de seguridad de WebSphere Application Server para realizar comprobaciones de autorización en recursos protegidos basados en roles de Java EE.
    Nota: SWAM es una característica en desuso del WebSphere Application Server Versión 9.0 y se eliminará en un release posterior.
    A continuación se indican las configuraciones de inicio de sesión JAAS proporcionadas por WebSphere Application Server:
    • Configuración de inicio de sesión JAAS WSLogin: ésta es una configuración de inicio de sesión JAAS genérica que puede utilizar un cliente Java, la aplicación de contenedor de cliente, el servlet, el archivo JSP, el enterprise bean, etc., para realizar la autenticación que se basa en un ID de usuario y una contraseña, o en la señal en el tiempo de ejecución de seguridad de WebSphere Application Server. No obstante, esta configuración no da soporte al manejador CallbackHandler especificado en el descriptor de despliegue del contenedor del cliente.
    • Configuración de inicio de sesión JAAS ClientContainer: esta configuración de inicio de sesión JAAS reconoce el manejador CallbackHandler especificado en el descriptor de despliegue del contenedor del cliente. El módulo de inicio de sesión de esta configuración de inicio de sesión utiliza el manejador CallbackHandler en el descriptor de despliegue del contenedor del cliente, si se ha especificado uno, aunque el código de aplicación haya especificado un manejador CallbackHandler en el contexto de inicio de sesión. Esto se aplica a la aplicación del contenedor del cliente.
    • Los sujetos autenticados con las configuraciones de inicio de sesión JAAS anteriores contienen un principal com.ibm.websphere.security.auth.WSPrincipal y una credencial com.ibm.websphere.security.auth.WSCredential. Si se pasa el Sujeto autenticado al método com.ibm.websphere.security.auth.WSSubject.doAs o a los otros métodos doAs, el tiempo de ejecución de seguridad de WebSphere Application Server podrá realizar comprobaciones de autorización en recursos Java EE, basándose en la credencial Sujeto com.ibm.websphere.security.auth.WSCredential.
  • Configuraciones de sesión JAAS definidas por el cliente: Puede definir otras configuraciones de inicio de sesión JAAS. Consulte Configuración de inicios de sesión mediante programa para JAAS (Java Authentication and Authorization Service) para obtener más información. Utilice estas configuraciones de inicio de sesión para realizar la autenticación mediante programa en el mecanismo de autenticación personalizado. No obstante, los sujetos de estas configuraciones de inicio de sesión JAAS definidas por el cliente no podrán ser utilizados por el tiempo de ejecución de seguridad de WebSphere Application Server para realizar comprobaciones de autorización si no contienen el principal y las credenciales que se necesitan.

Búsqueda de la excepción de inicio de sesión de la causa raíz en un inicio de sesión JAAS

Si obtiene una excepción LoginException después de emitir la API LoginContext.login, puede buscar la excepción de la causa raíz en el registro de usuarios configurado. En los módulos de inicio de sesión, las excepciones de registro están envueltas por una clase com.ibm.websphere.security.auth.WSLoginFailedException. Esta excepción tiene un método getCause con el que puede extraer la excepción que estaba envuelta después de emitir el mandato anterior.

No siempre tiene la garantía de obtener una excepción WSLoginFailedException, pero la mayoría de excepciones generadas a partir del registro de usuarios aparecen aquí. En el siguiente ejemplo se muestra una API LoginContext.login con el bloque de captura asociado. Convierta la excepción WSLoginFailedException en la clase com.ibm.websphere.security.auth.WSLoginFailedException si desea emitir la API getCause.

El siguiente ejemplo de determineCause se puede utilizar para procesar tipos de excepciones CustomUserRegistry.
try 
    {
         lc.login(); 
    } 
    catch (LoginException le)
    {
	// profundice en las excepciones a medida que vayan cayendo en cascada en el tiempo de
ejecución
	Throwable root_exception = determineCause(le);
	
	// ahora puede utilizar "root_exception" para compararla con un tipo de excepción concreto
	// por ejemplo, si ha implementado un tipo CustomUserRegistry, ya sabría lo que 
  //  tiene que buscar aquí.
    }


/* Método utilizado para profundizar en WSLoginFailedException para buscar la 
excepción de la "causa raíz" */

    public Throwable determineCause(Throwable e) 
      {
				Throwable root_exception = e, temp_exception = null;

				// continúe el bucle hasta que no haya más excepciones WSLoginFailedException o 
				// WSSecurityException 
         while (true) 
				{
						if (e instanceof com.ibm.websphere.security.auth.WSLoginFailedException)
						{
							temp_exception = ((com.ibm.websphere.security.auth.WSLoginFailedException)
							e).getCause();
						}
						else if (e instanceof com.ibm.websphere.security.WSSecurityException)
						{
							temp_exception = ((com.ibm.websphere.security.WSSecurityException)
							e).getCause();
						}
						else if (e instanceof javax.naming.NamingException)
								// busque la excepción incorporada Ldap
								{
										temp_exception = ((javax.naming.NamingException)e).getRootCause();
								}
						else if (e instanceof your_custom_exception_here)
						{
								// incluya su proceso personalizado aquí, si es necesario
						}
						else
						{
								// esta excepción no es uno de los tipos que está buscando, volvamos atrás ahora,
								// esta es la raíz desde la perspectiva de WebSphere 
								//  Application Server
								return root_exception;
						}
						if (temp_exception != null)
						{
								// tenemos una excepción; vuelva atrás y compruebe si tiene
								//  otra incorporada.
								root_exception = temp_exception;
								e = temp_exception;
								continue;
						}
						else
						{
								// al final, tenemos la excepción raíz de esta vía de acceso de llamada,
								// esto tiene que ocurrir en algún punto
								return root_exception;
						}
				}
		}

Búsqueda de la excepción de inicio de sesión de la causa raíz en un filtro de servlet

También puede recibir la excepción de la causa raíz desde un filtro de servlet cuando se trata de procesos de inicio de sesión posteriores al formulario. Esta excepción es útil ya que demuestra al usuario qué ha ocurrido. Puede emitir la siguiente API para obtener la excepción de la causa raíz:
Throwable t = com.ibm.websphere.security.auth.WSSubject.getRootLoginException();  
if (t != null)  	
         t = determineCause(t);

Cuando tenga la excepción, puede ejecutarla en el ejemplo determineCause anterior para obtener la causa raíz del registro original.

Habilitación de la propagación de excepciones de inicio de sesión de causa raíz a clientes Java puros

Actualmente, la causa raíz no se propaga a un cliente puro por motivos de seguridad. No obstante, puede que desee propagar la causa raíz a un cliente puro en un entorno de confianza. Si desea habilitar la propagación de excepciones de inicio de sesión de causa raíz a un cliente puro, pulse Seguridad > Seguridad global > Propiedades personalizadas en la consola administrativa de WebSphere Application Server y establezca la siguiente propiedad:

com.ibm.websphere.security.registry.propagateExceptionsToClient=true

Inicio de sesión mediante programa sin solicitud

WebSphere Application Server ofrece una implementación sin indicador de la interfaz javax.security.auth.callback.CallbackHandler, que se denomina com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl. Utilizando esta interfaz, una aplicación puede pasar datos de autenticación a la instancia de módulo de inicio de sesión de WebSphere para realizar la autenticación. Esta posibilidad es útil para que el código de la aplicación de servidor autentique una identidad y la utilice para invocar recursos Java EE en sentido descendente.
javax.security.auth.login.LoginContext lc = null;

         try {
lc = new javax.security.auth.login.LoginContext("WSLogin",
new com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl("user", 
      "securityrealm", "securedpassword"));

// crear un LoginContext y especificar la implementación de CallbackHandler
// la implementación de CallbackHandler determina cómo se recopilan los datos de autenticación
// en este caso, los datos de autenticación "se pasan" al mecanismo de autenticación
//   implementado por LoginModule.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: no se ha podido crear una instancia de contexto
de inicio de sesión con la excepción: " 
+ e.getMessage());
e.printStackTrace();

// puede que no se otorgue el permiso javax.security.auth.AuthPermission "createLoginContext"
//   a la aplicación, o que la configuración de inicio de sesión JAAS no esté definida.
}

if (lc != null)
         try {
lc.login();  // realizar inicio de sesión
javax.security.auth.Subject s = lc.getSubject();
// obtener el sujeto autenticado

// Invocar un recurso Java EE utilizando el sujeto autenticado
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
         try {
bankAccount.deposit(100.00);  // donde bankAccount es un EJB protegido
} catch(Exception e) {
System.out.println("ERROR: error al acceder a recurso EJB, excepción: " 
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: inicio de sesión no satisfactorio con la excepción: " +  e.getMessage());
e.printStackTrace();

// error en el inicio de sesión, deberá proporcionar la lógica de reinicio de sesión
}

Puede utilizar el manejador de retorno de llamada com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl con un cliente Java puro, un contenedor de la aplicación cliente, un enterprise bean, los archivos JSP (JavaServer Pages), el servlet u otros recursos Java 2 Platform, Enterprise Edition (Java EE).

Nota: El manejador de retorno de llamada WSCallbackHandlerImpl es distinto dependiendo de si utiliza la seguridad de WebSphere Application Server o la seguridad de servicios web. Se encuentra en el archivo sas.jar de seguridad, y en el archivo was-wssecurity.jar para la seguridad de servicios Web.

Inicio de sesión mediante programa con solicitud de interfaz de usuario

WebSphere Application Server también proporciona una implementación de interfaz de usuario de la implementación javax.security.auth.callback.CallbackHandler para recopilar datos de autenticación de un usuario mediante solicitudes de inicio de sesión de la interfaz de usuario. El manejador de retorno de llamada com.ibm.websphere.security.auth.callback.WSGUICallbackHandlerImpl presenta un panel de inicio de sesión de la interfaz de usuario para solicitar los datos de autenticación a los usuarios.
[z/OS][AIX HP-UX Solaris]Nota: Este comportamiento requiere que el entorno de DISPLAY llame a un servidor X11.
javax.security.auth.login.LoginContext lc = null;

         try {
lc = new javax.security.auth.login.LoginContext("WSLogin",
new com.ibm.websphere.security.auth.callback.WSGUICallbackHandlerImpl());

// crear un LoginContext y especificar la implementación de CallbackHandler
// la implementación de CallbackHandler determina cómo se recopilan los datos de autenticación
// en este caso, los datos de autenticación son recopilados por la solicitud de inicio de sesión de GUI
//   y se pasan al mecanismo de autenticación implementado por LoginModule.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: no se ha podido crear una instancia de contexto
de inicio de sesión con la excepción: " 
+ e.getMessage());
e.printStackTrace();

// puede que no se otorgue el permiso javax.security.auth.AuthPermission "createLoginContext"
//   a la aplicación, o que la configuración de inicio de sesión JAAS no esté definida.
}

if (lc != null)
         try {
lc.login();  // realizar inicio de sesión
javax.security.auth.Subject s = lc.getSubject();
// obtener el sujeto autenticado

// Invocar los recursos Java EE utilizando el sujeto autenticado
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
         try {
bankAccount.deposit(100.00);  // donde bankAccount es un enterprise bean protegido
} catch(Exception e) {
System.out.println("ERROR: error al acceder a recurso EJB, excepción: " 
+ e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: inicio de sesión no satisfactorio con la excepción: " +  e.getMessage());
e.printStackTrace();

// error en el inicio de sesión, deberá proporcionar la lógica de reinicio de sesión
}
Atención: El manejador de retorno de llamada com.ibm.websphere.security.auth.callback.WSGUICallbackHandlerImpl no se debe utilizar en los recursos de servidor como, por ejemplo, enterprise beans, servlets, archivos JSP, etc. La solicitud de inicio de sesión de la interfaz de usuario bloquea las entradas de usuario en el servidor. Este no es el comportamiento correcto para un proceso de servidor.

WebSphere Application Server también proporciona una implementación de memoria caché de credenciales de Kerberos de la interfaz javax.security.auth.callback.CallbackHandler. El manejador de retorno de llamada, com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl. Utilizando esta interfaz, una aplicación puede pasar datos de autenticación a la instancia de módulo de inicio de sesión de WebSphere para realizar la autenticación.

Esta prestación es sólo para el código de la aplicación del lado del cliente para autenticar en WebSphere Application Server con la memoria caché de credenciales Kerberos.

Si las opciones siguientes existen en el archivo wsjaas_client.conf, establézcalas en false:

   useDefaultKeytab=false
   useDefaultCcache=false
   tryFirstPass=false
   useFirstPass=false
   forwardable=false
   renewable=false
   renewable=false
   noaddress=false

javax.security.auth.login.LoginContext lc = null;

String krb5Ccache = /etc/krb5/krb5cc_utle;

         try {
lc = new javax.security.auth.login.LoginContext("WSKRB5Login",
new com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl(user, krb5Realm, krb5Ccache, false));
// crear un LoginContext y especificar la implementación de CallbackHandler
// la implementación de CallbackHandler determina cómo se recopilan los datos de
autenticación
// en este caso, los datos de autenticación son recopilados por la solicitud de stdin
//   y se pasan al mecanismo de autenticación implementado por LoginModule.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: no se ha podido crear una instancia de contexto de inicio
de sesión con la excepción: 
          " + e.getMessage());
e.printStackTrace();

// puede que no se otorgue el permiso javax.security.auth.AuthPermission "createLoginContext"
//   a la aplicación, o que la configuración de inicio de sesión JAAS no esté definida.
}

if (lc != null)
         try {
lc.login();  // realizar inicio de sesión
javax.security.auth.Subject s = lc.getSubject();
// obtener el sujeto autenticado

// Invocar un recurso Java EE utilizando el sujeto autenticado
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
         try {
bankAccount.deposit(100.00);  
// donde bankAccount es un enterprise bean protegido
} catch(Exception e) {
System.out.println("ERROR: error al acceder a recurso EJB, excepción: " 
       + e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: inicio de sesión no satisfactorio con la excepción: " +  e.getMessage());
e.printStackTrace();

// error en el inicio de sesión, deberá proporcionar la lógica de reinicio de sesión
}

Servidor de aplicaciones con memoria caché de credenciales Kerberos por omisión.

javax.security.auth.login.LoginContext lc = null;

         try {
lc = new javax.security.auth.login.LoginContext("WSKRB5Login",
new com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl(user, krb5Realm, null, true));
// crear un LoginContext y especificar la implementación de CallbackHandler
// la implementación de CallbackHandler determina cómo se recopilan los datos de
autenticación
// en este caso, los datos de autenticación son recopilados por la solicitud de stdin
//   y se pasan al mecanismo de autenticación implementado por LoginModule.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: no se ha podido crear una instancia de contexto de inicio
de sesión con la excepción: 
          " + e.getMessage());
e.printStackTrace();

// puede que no se otorgue el permiso javax.security.auth.AuthPermission "createLoginContext"
//   a la aplicación, o que la configuración de inicio de sesión JAAS no esté definida.
}

if (lc != null)
         try {
lc.login();  // realizar inicio de sesión
javax.security.auth.Subject s = lc.getSubject();
// obtener el sujeto autenticado

// Invocar un recurso Java EE utilizando el sujeto autenticado
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
         try {
bankAccount.deposit(100.00);  
// donde bankAccount es un enterprise bean protegido
} catch(Exception e) {
System.out.println("ERROR: error al acceder a recurso EJB, excepción: " 
       + e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: inicio de sesión no satisfactorio con la excepción: " +  e.getMessage());
e.printStackTrace();

// error en el inicio de sesión, deberá proporcionar la lógica de reinicio de sesión
}

Servidor de aplicaciones con memoria caché de credenciales Kerberos nativa de Microsoft. El cliente debe
iniciar sesión en el controlador de dominio de Microsoft.

javax.security.auth.login.LoginContext lc = null;

         try {
lc = new javax.security.auth.login.LoginContext("WSKRB5Login",
new com.ibm.websphere.security.auth.callback.WSCcacheCallBackHandlerImpl(null, null, null, true));
// crear un LoginContext y especificar la implementación de CallbackHandler
// la implementación de CallbackHandler determina cómo se recopilan los datos de
autenticación
// en este caso, los datos de autenticación son recopilados por la solicitud de stdin
//   y se pasan al mecanismo de autenticación implementado por LoginModule.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: no se ha podido crear una instancia de contexto de inicio
de sesión con la excepción: 
          " + e.getMessage());
e.printStackTrace();

// puede que no se otorgue el permiso javax.security.auth.AuthPermission "createLoginContext"
//   a la aplicación, o que la configuración de inicio de sesión JAAS no esté definida.
}

if (lc != null)
         try {
lc.login();  // realizar inicio de sesión
javax.security.auth.Subject s = lc.getSubject();
// obtener el sujeto autenticado

// Invocar un recurso Java EE utilizando el sujeto autenticado
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
         try {
bankAccount.deposit(100.00);  
// donde bankAccount es un enterprise bean protegido
} catch(Exception e) {
System.out.println("ERROR: error al acceder a recurso EJB, excepción: " 
       + e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: inicio de sesión no satisfactorio con la excepción: " +  e.getMessage());
e.printStackTrace();

// error en el inicio de sesión, deberá proporcionar la lógica de reinicio de sesión
}

Módulo WSKRB5Login

La configuración de inicio de sesión JAAS WSKRB5Login: ésta es una configuración de inicio de sesión JAAS genérica que puede utilizar un cliente Java, una aplicación de contenedor de cliente, el servlet, el archivo JSP o el enterprise bean para realizar la autenticación basada en una contraseña de nombre principal de Kerberos o en una memoria caché de credenciales de Kerberos en el tiempo de ejecución de seguridad de WebSphere Application Server. No obstante, esta configuración no da soporte al manejador CallbackHandler especificado en el descriptor de despliegue del contenedor del cliente.

Coloque el archivo krb5.ini o krb5.conf que ha creado en la ubicación predeterminada. Si uno de estos dos archivos no se encuentra en la ubicación predeterminada, deberá establecer la propiedad de sistema JVM java.security.krb5.conf con la vía de acceso y el nombre de archivo de configuración de Kerberos correctos.

En una plataforma Windows, la ubicación predeterminada es c:\winnt\krb5.ini.

En una plataforma Linux, la ubicación predeterminada es /etc/krb5.conf.

En otras plataformas Unix, la ubicación predeterminada es /etc/krb5/krb5.conf.

En una plataforma z/OS, la ubicación predeterminada es /etc/krb5/krb5.conf.

Los valores de configuración de Kerberos, el nombre KDC (Key Distribution Center) de Kerberos y los valores de reino se proporcionan en el archivo de configuración de Kerberos o por medio de los archivos de propiedades del sistema java.security.krb5.kdc y java.security.krb5.realm.

Inicio de sesión mediante programa con solicitud de stdin

WebSphere Application Server también proporciona una implementación de stdin de la interfaz javax.security.auth.callback.CallbackHandler. El manejador de retorno de llamada com.ibm.websphere.security.auth.callback.WSStdinCallbackHandlerImpl solicita y recopila datos de autenticación del usuario mediante la solicitud de stdin.
javax.security.auth.login.LoginContext lc = null;

         try {
lc = new javax.security.auth.login.LoginContext("WSLogin",
new com.ibm.websphere.security.auth.callback.WSStdinCallbackHandlerImpl());

// crear un LoginContext y especificar la implementación de CallbackHandler
// la implementación de CallbackHandler determina cómo se recopilan los datos de
autenticación
// en este caso, los datos de autenticación son recopilados por la solicitud de stdin
//   y se pasan al mecanismo de autenticación implementado por LoginModule.
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: no se ha podido crear una instancia de contexto de inicio
de sesión con la excepción: 
          " + e.getMessage());
e.printStackTrace();

// puede que no se otorgue el permiso javax.security.auth.AuthPermission "createLoginContext"
//   a la aplicación, o que la configuración de inicio de sesión JAAS no esté definida.
}

if (lc != null)
         try {
lc.login();  // realizar inicio de sesión
javax.security.auth.Subject s = lc.getSubject();
// obtener el sujeto autenticado

// Invocar un recurso Java EE utilizando el sujeto autenticado
com.ibm.websphere.security.auth.WSSubject.doAs(s,
new java.security.PrivilegedAction() {
public Object run() {
         try {
bankAccount.deposit(100.00);  
// donde bankAccount es un enterprise bean protegido
} catch(Exception e) {
System.out.println("ERROR: error al acceder a recurso EJB, excepción: " 
       + e.getMessage());
e.printStackTrace();
}
return null;
}
}
);
} catch (javax.security.auth.login.LoginException e) {
System.err.println("ERROR: inicio de sesión no satisfactorio con la excepción: " +  e.getMessage());
e.printStackTrace();

// error en el inicio de sesión, deberá proporcionar la lógica de reinicio de sesión
}
Atención: El manejador de retorno de llamada com.ibm.websphere.security.auth.callback.WSStdinCallbackHandlerImpl no se debe utilizar en los recursos de servidor como, por ejemplo, enterprise beans, servlets, archivos JSP, etc. La entrada de la solicitud de stdin no se envía al entorno del servidor. La mayoría de servidores se ejecutan de fondo y no tienen una consola. No obstante, si el servidor tiene una consola, la solicitud de stdin bloquea las entradas de usuario en el servidor. Este no es el comportamiento correcto para un proceso de servidor.

Icon that indicates the type of topic Concept topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=csec_programlog
File name: csec_programlog.html