Alteración temporal del sujeto RunAs en la hebra para JAAS
Para ampliar la función proporcionada por las API (interfaces de programación de aplicaciones) JAAS (Java™ Authentication and Authorization Service), puede establecer el sujeto RunAs, o sujeto de invocación, con una entrada válida diferente que se utiliza en las solicitudes de salida de esta hebra de ejecución.
Antes de empezar
- permission javax.security.auth.AuthPermission "wssecurity.getRunAsSubject"
- permission javax.security.auth.AuthPermission "wssecurity.getCallerSubject"
- permission javax.security.auth.AuthPermission "wssecurity.setRunAsSubject"
Acerca de esta tarea
Con esta extensión tiene la flexibilidad de asociar el sujeto a todas las llamadas remotas de esta hebra incluso si utiliza un método WSSubject.doAs para asociar el sujeto con la acción remota.
Un desarrollador de aplicaciones puede
utilizar el método WSSubject.doAs para establecer un sujeto JAAS
autenticado por un módulo de inicio de sesión JAAS como la identidad de
seguridad activa que debe utilizar el tiempo de ejecución de WebSphere
Application Server mientras realiza la acción especificada. WSSubject.doAs sólo sincroniza la identidad de hebra
cuando se lo llama dentro de un componente que esté configurado para la
sincronización con la hebra. Cuando se utiliza conjuntamente con la
opción Sincronizar con hebra de OS de la aplicación habilitada, esta identidad se
establece en la hebra del sistema operativo para el ámbito de dicha acción.
Procedimiento
Ejemplo
try { javax.security.auth.Subject runas_subject, caller_subject; runas_subject = com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); caller_subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject(); // establecer un nuevo
sujeto RunAs para la hebra, alterando temporalmente el establecido de forma declarativa com.ibm.websphere.security.auth.WSSubject.setRunAsSubject(caller_subject); // realizar algunas llamadas
remotas // volver a restaurar al runAsSubject anterior com.ibm.websphere.security.auth.WSSubject.setRunAsSubject(runas_subject); } catch (WSSecurityException e) { // log error } catch (Exception e) { // log error }