Con una aplicación de servidor, la aplicación actúa como consumidor de solicitudes y el generador de respuestas se despliega y se ejecuta en el contenedor Java™ EE (Java Platform, Enterprise Edition). El componente de consumidor para la seguridad de servicios web almacena las señales de seguridad que recibe en el Sujeto JAAS
(Java Java Authentication and Authorization Service) de la hebra actual. Puede recuperar las señales de seguridad del Sujeto JAAS que se mantiene como una hebra local del contenedor.
Acerca de esta tarea
Esta información sólo se aplica a JAX-WS (API de Java para servicios web XML .
Los manejadores de seguridad son responsables de propagar señales de seguridad. Estas señales de seguridad se incluyen en la cabecera de seguridad SOAP y se pasan a los servidores en sentido descendente. Las señales de seguridad se encapsulan en las clases de implementación
de la interfaz com.ibm.wsspi.wssecurity.auth.token.Token.
Puede recuperar los datos de la señal de seguridad de una aplicación de servidor o de una aplicación cliente.
Efectúe los pasos siguientes para recuperar los datos de la señal de seguridad de una aplicación de servidor:
Procedimiento
- Obtenga el sujeto JAAS de la hebra actual utilizando la API WSSubject. Si habilita la seguridad Java 2
en el panel de seguridad global de la consola administrativa, se impide el acceso al sujeto
JAAS si el código de la aplicación no obtiene el permiso
javax.security.auth.AuthPermission("wssecurity.getCallerSubject"). El ejemplo de código siguiente muestra cómo obtener el Sujeto JAAS:
javax.security.auth.Subject subject;
try {
subject = com.ibm.websphere.security.auth.WSSubject.getCallerSubject();
} catch (com.ibm.websphere.security.WSSecurityException e) {
…
}
- Obtenga un conjunto de credenciales privadas del Sujeto. Para obtener más información, consulte la clase de la interfaz de programas de aplicación, la API, com.ibm.websphere.security.auth.WSSubject. Para acceder
a esta información en el Information Center, pulse Referencia > Desarrollador > Documentación de la API
> Interfaces del programa de aplicación. En el artículo Application Programming Interfaces (Interfaces del programa de aplicación),
pulse com.ibm.websphere.security.auth > WSSubject.
Atención: Cuando está habilitada la seguridad
Java 2, es posible que tenga que utilizar la clase AccessController para que al operar con los objetos de seguridad del contenedor Java EE no se produzca una violación de seguridad.
El siguiente ejemplo de código muestra cómo establecer la clase
AccessController y obtener las credenciales privadas:
Set s = (Set) AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
return subj.getPrivateCredentials();
}
});
- Busque la clase de señal de destino en las credenciales privadas. Puede buscar la clase de señal de destino utilizando la interfaz java.util.Iterator. El ejemplo siguiente muestra cómo recuperar una señal de nombre de usuario con un valor de ID de señal determinado en la cabecera de seguridad. También puede utilizar otras llamadas de método para recuperar las señales de seguridad. Para obtener más información, consulte los documentos de las API (interfaces de programas de aplicación) para las clases de símbolos personalizados
o de la interfaz com.ibm.wsspi.wssecurity.auth.token.Token.
com.ibm.wsspi.wssecurity.auth.token.UsernameToken unt;
Iterator it = s.iterator();
while (it.hasNext()) {
Object obj = it.next();
if (obj != null &&
obj instanceOf com.ibm.wsspi.wssecurity.auth.token.UsernameToken) {
unt =(com.ibm.wsspi.wssecurity.auth.token.UsernameToken) obj;
if (unt.getId().equals(“…”)) break;
else continue;
}
}
Resultados
Después de realizar estos pasos, habrá recuperado las señales de seguridad del Sujeto JAAS en una aplicación de servidor.