如何在 WebSphere 上为远程 EJB 调用启用 Kerberos 身份验证?
我的应用程序是一个独立的 Swing 客户端,它调用 EJB 无状态会话 Bean,这要归功于经典的 JNDI 查找和 RMI-IIOP 方法调用。它是作为 Java WebStart 应用程序启动的。我的目标是从 with 方法检索客户端用户的身份,这要归功于在 Linux 上运行的 Windows 工作站、ActiveDirectory 和 WebSphere 服务器之间的 Kerberos SSO。EJBContext
getCallerPrincipal
由于信息中心文档,我已经在网络部署模式下成功地配置了我的 WebSphere 单元以支持 Kerberos 身份验证。
和 文件都可以,并经过 Linux 和 、答案的测试。krb5.conf
krb5.keytab
kinit
klist
wsadmin
$AdminTask validateKrbConfig
true
客户机设置仅引用要启用的 JAAS 文件,以使用命令系统属性启用。我的直觉告诉我,这可能还不够。login.config
但是现在,我没有找到更多信息来完成测试用例:
- 必须如何设置 JNDI 初始上下文环境才能触发 Kerberos 协商?
- 如果服务器端有其他要求,比如用角色保护我的EJB(例如,JBoss不需要它)?
更新
由于没有运行带有 的 JavaEE 客户机容器,我已经在 JNLP 中设置了读取所需的属性和 JAAS 登录配置:./launchClient
sas.client.props
<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"/>
My 是针对 Oracle Java 的,所以它包含:wsjaas_client.config
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 身份验证:我的 kerberos 缓存中没有 SPN 的 TGS(来自 Windows 或 Linux 工作站),并且 JNDI 连接仍然是匿名建立的。WAS/myserver.mydomain.com
没有错误消息,没有警告,最后没有主体。如何诊断错误或不足之处?
更新 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 身份验证。