Ejemplo: utilización de la configuración de WSLogin para crear un asunto de autenticación básico
Este ejemplo muestra cómo utilizar la configuración de inicio de sesión de aplicación WSLogin desde una aplicación J2EE (Java™ 2 Platform, Enterprise Edition) para iniciar la sesión y obtener un asunto que contiene el ID de usuario y la contraseña del dominio de destino.
javax.security.auth.Subject subject = null;
try
{
// Crear un contexto de conexión con la configuración de inicio de sesión WSLogin y especificar un ID
// de usuario, dominio destino y contraseña. Nota: Si nombre_dominio_destino es igual que
// el dominio actual, se crea un asunto autenticado. Sin embargo, si
// nombre_dominio_destino es diferente del dominio actual, se crea un asunto
// de autenticación básico que no se valida. Este asunto no validado
// se crea para que pueda enviar una solicitud a un destino
// diferente con credenciales de seguridad válidos para dicho dominio.
javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
new WSCallbackHandlerImpl("id_usuario", "nombre_dominio_destino", "contraseña"));
// Nota: el código siguiente es una alternativa que valida el ID de usuario y la contraseña
// especificados en el dominio de destino. El código realiza una llamada remota en el
// servidor de destino y devolverá true si el ID de usuario y la contraseña son
// válidos y false si el ID de usuario y la contraseña no son válidos. Si se devuelve
// false, se crea una excepción WSLoginFailedException. Puede capturar esa excepción
// y realizar un reintento o detener el flujo de la solicitud para que la
// surja como resultado de este inicio de sesión.
// CONTEXTO DE CONEXIÓN ALTERNATIVO QUE VALIDA EL ID DE USUARIO Y LA CONTRASEÑA EN EL
// DOMINIO DE DESTINO
/**** currently remarked out ****
java.util.Map appContext = new java.util.HashMap();
appContext.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
appContext.put(javax.naming.Context.PROVIDER_URL,
"corbaloc:iiop:target_host:2809");
javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
new WSCallbackHandlerImpl("id_usuario", "nombre_dominio_destino", "contraseña", appContext));
**** currently remarked out ****/
// Inicia la conexión
ctx.login();
// Obtiene el asunto del contexto
subject = ctx.getSubject();
}
catch (javax.security.auth.login.LoginException e)
{
throw new com.ibm.websphere.security.auth.WSLoginFailedException (e.getMessage(), e);
}
if (subject != null)
{
// Define una acción privilegiada que encapsula la solicitud remota.
java.security.PrivilegedAction myAction = java.security.PrivilegedAction()
{
public Object run()
{
// Presupone que ya se ha definido un proxy. Este método de ejemplo devuelve una serie
return proxy.remoteRequest();
}
});
// Inicia esta acción utilizando el asunto de autenticación básica necesario según los
// requisitos de seguridad del dominio de destino.
String myResult = (String) com.ibm.websphere.security.auth.WSSubject.doAs
(subject, myAction);
}