由于经典的 JNDI 查找和 RMI-IIOP 方法调用,我的应用程序是一个独立的 Swing 客户端,它调用 EJB 无状态会话 bean。它作为 Java WebStart 应用程序启动。我的目标是通过 Windows 工作站、ActiveDirectory 和在 Linux 上运行的 WebSphere 服务器之间的 Kerberos SSO从EJBContext
with方法中检索客户端用户的身份。getCallerPrincipal
感谢 infocenter 文档,我已经成功地将我的 WebSphere 单元配置为网络部署模式以支持 Kerberos 身份验证。
krb5.conf
和文件都可以,krb5.keytab
并且在 Linux和答案中都经过测试。kinit
klist
wsadmin
$AdminTask validateKrbConfig
true
客户端设置仅引用 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 身份验证。