由于经典的 JNDI 查找和 RMI-IIOP 方法调用,我的应用程序是一个独立的 Swing 客户端,它调用 EJB 无状态会话 bean。它作为 Java WebStart 应用程序启动。我的目标是通过 Windows 工作站、ActiveDirectory 和在 Linux 上运行的 WebSphere 服务器之间的 Kerberos SSO从EJBContextwith方法中检索客户端用户的身份。getCallerPrincipal
感谢 infocenter 文档,我已经成功地将我的 WebSphere 单元配置为网络部署模式以支持 Kerberos 身份验证。
krb5.conf和文件都可以,krb5.keytab并且在 Linux和答案中都经过测试。kinitklistwsadmin$AdminTask validateKrbConfigtrue
客户端设置仅引用 JAASlogin.config文件以使用命令系统属性启用。我的直觉告诉我,这可能还不够。
但是现在,我找不到更多信息来完成测试用例:
- 必须如何设置 JNDI 初始上下文环境才能触发 Kerberos 协商?
- 如果服务器端有其他要求,比如用角色保护我的 EJB(例如 JBoss 不需要它)?
更新
由于没有运行 JavaEE 客户端容器./launchClient,我在我的 JNLP 中设置了读取所需的属性sas.client.props和 JAAS 登录配置:
<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"/>
Mywsjaas_client.config适用于 Oracle Java,因此它包含:
WSKRB5Login{
com.sun.security.auth.module.Krb5LoginModule required
debug=true useTicketCache=true doNotPrompt=true;
};
我的sas.client.props包含:
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
目前,没有触发 Kerberos 身份验证:WAS/myserver.mydomain.com在我的 kerberos 缓存(来自 Windows 或 Linux 工作站)中没有针对 SPN 的 TGS,并且 JNDI 连接仍然是匿名建立的。
没有错误消息,没有警告,最后没有主体。我如何诊断出了什么问题或缺少什么?
更新 2012/06/20
这里有一些前进的步骤。在使用 Oracle Java 运行的应用程序 JNLP 中,我设置了以下属性以使用 IBM ORB 并启用完整的跟踪和调试信息:
<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"/>
该文件TraceSettings.properties包含
traceFileName=c:\\temp\\traces.log
ORBRas=all=enabled
SASRas=all=enabled
com.ibm.*=all=enabled
即使在阅读了WebSphere 7 Security IBM RedBook的大部分内容之后,我仍然无法从客户端获得 CSIv2 触发器 Kerberos 身份验证。