我们正在尝试为我们的Jboss EAP 6.4实例(Java 1.8)使用Kerberos实现单点登录。使大多数事情起作用。可以与Java客户端和Web连接。 但是我们有一个到另一个Jboss实例的远程出站连接,我们无法使用它。 在我们更改为Kerberos(之前使用Ldap)之前,这是通过在配置中为与现有用户的连接设置用户名和安全领域来实现的。
第一个jboss实例上的先前配置:
extension
上面使用的安全领域:
extension UINavigationController {
override open var childForStatusBarStyle: UIViewController? {
return topViewController
}
}
用于从远程子域获取ejb的代码,其中查找的参数是软件包+类名:
<remote-outbound-connection name="ejb-out-con" outbound-socket-binding-ref="ejb-out" username="admin" security-realm="ejb-admin-realm">
<properties>
<property name="SSL_ENABLED" value="false"/>
</properties>
</remote-outbound-connection>
但是:在切换到Kerberos后,似乎没有在辅助服务器到服务器的连接上使用用户名和安全领域,并且我们以匿名用户。客户端到(第一台)服务器正常工作,但是下一跳将丢失所有用户上下文。调试时,我们可以看到SecurityContext中的principal属性设置为随机数字符串。
<security-realm name="ejb-admin-realm">
<server-identities>
<secret value="somepassword"/>
</server-identities>
</security-realm>
类似于 a77bfaf6-97e2-47f0-aa2c-bf212ffc348c 。
尝试了各种不同的 XNIO选项: SSL_ENABLED , SSL_STARTTLS , SASL_POLICY_NOANONYMOUS , SASL_POLICY_NOPLAINTEXT , SASL_DISALLOWED_MECHANISMS 具有不同的值,但是没有用。
示例:
// environment contain java.naming.factory.url.pkgs=org.jboss.ejb.client.naming
InitialContext ctx = new InitialContext(environment);
CaseInbox caseInbox = (CaseInbox) ctx.lookup("ejb:sub-domain.ear/subservice/SubCaseInboxBean!" + class);
有人知道这种方法是否可行(使用Kerberos和远程出站连接)?如果是的话,怎么办?我们需要新的Jboss吗?完全不同的方法?拦截器? 用了几个小时来搜索问题和文档。但是没有任何帮助。
P.S这是我的第一个stackoverflow问题。希望我一切都好。 :)