Mi aplicación es un cliente Swing independiente que invoca los beans EJB de sesión sin estado gracias a la búsqueda clásica JNDI y las llamadas al método RMI-IIOP. Se inicia como una aplicación Java WebStart. Mi objetivo es recuperar la identidad del usuario del cliente de EJBContext
con el método getCallerPrincipal
gracias al SSO de Kerberos entre la estación de trabajo de Windows, ActiveDirectory y el servidor de WebSphere que se ejecuta en Linux.¿Cómo habilitar la autenticación Kerberos para llamadas EJB remotas en WebSphere?
Ya he configurado correctamente mi celda de WebSphere en modo de implementación de red para admitir la autenticación Kerberos thanks to the infocenter documentation.
Ambos krb5.conf
y krb5.keytab
archivos están bien y probado tanto con Linux kinit
, klist
y wsadmin
, $AdminTask validateKrbConfig
responde true
.
El client setup solo hace referencia a un archivo JAAS login.config
para habilitarlo con la propiedad del sistema de comando. Mi intuición me dice que probablemente no sea suficiente.
Pero ahora, no se me hace más información para finalizar el caso de prueba:
- cómo el entorno contexto inicial JNDI debe ser configurado para activar la negociación de Kerberos?
- si hay otros requisitos en el lado del servidor como proteger mi EJB con un rol (JBoss no lo requiere, por ejemplo)?
actualización
Como no se está ejecutando contenedor de cliente JavaEE con ./launchClient
, yo he puesto en mi JNLP las propiedades requeridas para leer sas.client.props
y JAAS configuración de entrada:
<property name="java.security.auth.login.config" value="C:\temp\wsjaas_client.config"/>
<property name="com.ibm.CORBA.ConfigURL" value="C:\temp\sas.client.props"/>
Mi wsjaas_client.config
es para Oracle Java por lo que contiene:
WSKRB5Login{
com.sun.security.auth.module.Krb5LoginModule required
debug=true useTicketCache=true doNotPrompt=true;
};
Mi sas.client.props
contiene:
com.ibm.CORBA.securityEnabled=true
com.ibm.CORBA.authenticationTarget=KRB5
com.ibm.CORBA.loginSource=krb5Ccache
com.ibm.CORBA.loginUserid=
com.ibm.CORBA.loginPassword=
com.ibm.CORBA.krb5CcacheFile=
com.ibm.CORBA.krb5ConfigFile=C:\\temp\\krb5.conf
Por el momento, ninguna autenticación Kerberos se dispara: no hay TGS para el SPN WAS/myserver.mydomain.com
en mi caché Kerberos (ya sea desde estaciones de trabajo Windows o Linux) y la conexión JNDI todavía se establece de forma anónima .
No hay mensaje de error, ninguna advertencia y, finalmente, no hay nada principal. ¿Cómo puedo diagnosticar lo que está mal o lo que falta?
Actualización 2012/06/20
Éstos son algunos pasos hacia adelante.En mi JNLP aplicación que se ejecuta con Oracle Java, he establezca las siguientes propiedades para utilizar IBM ORB y permitir la plena traza y depurar información:
<property name="org.omg.CORBA.ORBSingletonClass" value="com.ibm.rmi.corba.ORBSingleton"/>
<property name="org.omg.CORBA.ORBClass" value="com.ibm.CORBA.iiop.ORB"/>
<property name="traceSettingsFile" value="C:\temp\TraceSettings.properties"/>
El archivo TraceSettings.properties
contiene
traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled
Incluso después de leer piezas grandes de WebSphere 7 Security IBM RedBook Todavía no consigo que CSIv2 active la autenticación Kerberos desde el lado del cliente.
Según IBM, en este momento se requiere IBM JavaSE 6 en ambos extremos para que la autenticación Kerberos funcione a través de IIOP. Por lo tanto, puede significar que no funciona en absoluto para WebSphere corriendo sobre Oracle JavaSE en Solaris, pero tengo dudas al respecto. Probablemente se necesita la misma JVM en cada lado, pero esta no es mi configuración actual. –