La mia applicazione è un client Swing autonomo che richiama i bean di sessione stateless EJB grazie alla classica ricerca JNDI e alle chiamate al metodo RMI-IIOP. Viene avviato come applicazione Java WebStart. Il mio obiettivo è recuperare l'identità dell'utente del client da EJBContext
con il metodo getCallerPrincipal
grazie a Kerberos SSO tra la workstation Windows, ActiveDirectory e il server WebSphere in esecuzione su Linux.Come abilitare l'autenticazione Kerberos per la chiamata EJB remota su WebSphere?
Ho già configurato correttamente la mia cella WebSphere in modalità di implementazione della rete per supportare l'autenticazione Kerberos thanks to the infocenter documentation.
Entrambi i file krb5.conf
e krb5.keytab
sono OK e testato sia con Linux kinit
, klist
e wsadmin
, $AdminTask validateKrbConfig
risponde true
.
Il client setup si riferisce solo a un file JAAS login.config
per consentire con la proprietà del sistema di comando. La mia intuizione mi dice che probabilmente non è abbastanza.
Ma ora, non trovo ulteriori informazioni per finalizzare il test case:
- come l'ambiente JNDI contesto iniziale deve essere impostato per innescare Kerberos trattativa?
- se ci sono altri requisiti sul lato server come proteggere il mio EJB con un ruolo (JBoss non lo richiede ad esempio)?
Aggiornamento
Poiché non è in esecuzione contenitore client JavaEE con ./launchClient
, ho impostato nel mio JNLP le proprietà richieste per leggere sas.client.props
e JAAS configurazione login:
<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"/>
mio wsjaas_client.config
è per Oracle Java quindi contiene:
WSKRB5Login{
com.sun.security.auth.module.Krb5LoginModule required
debug=true useTicketCache=true doNotPrompt=true;
};
mio 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
Al momento, nessuna autenticazione Kerberos viene attivato: non c'è TGS per l'SPN WAS/myserver.mydomain.com
nella mia cache di Kerberos (sia da stazioni di lavoro Windows o Linux) e connessione JNDI è ancora stabilito in forma anonima .
Nessun messaggio di errore, nessun avviso e infine nessun principale. Come faccio a diagnosticare cosa c'è che non va?
Aggiornamento 2012/06/20
Ecco alcuni passi in avanti.Nel mio JNLP applicazione in esecuzione con Oracle Java, ho impostare le seguenti proprietà per utilizzare IBM ORB e permettere la piena traccia ed eseguire il debug informazioni:
<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"/>
Il file TraceSettings.properties
contiene
traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled
Anche dopo aver letto gran parte di WebSphere 7 Security IBM RedBook Non riesco ancora a ottenere l'autenticazione Kerberos con trigger CSIv2 dal lato client.
Secondo IBM, al momento IBM JavaSE 6 è richiesto a entrambe le estremità per ottenere l'autenticazione Kerberos che funziona su IIOP. Quindi potrebbe significare che non funziona affatto per WebSphere in esecuzione su Oracle JavaSE su Solaris, ma ho dei dubbi a riguardo. Probabilmente è richiesta la stessa JVM su ciascun lato, ma questa non è la mia attuale configurazione. –