Java 无法从另一个使用KeyClope保护的wildfly实例调用远程EJB
Java 无法从另一个使用KeyClope保护的wildfly实例调用远程EJB,java,security,ejb-3.0,java-ee-7,keycloak,Java,Security,Ejb 3.0,Java Ee 7,Keycloak,调用部署在同一台机器上运行的另一个Wildfly实例上的远程EJB时,我遇到了一个问题。我已经按照链接设置了EJB调用。我在不同的服务器实例上部署了两个应用程序(都使用KeyClope进行保护),分别是my-caller.ear和my-callee.ear。结构如下: **my-caller-app.ear** | |-----lib |-----META-INF |-----jboss-ejb-client.xml |-----jboss-app.xml
调用部署在同一台机器上运行的另一个Wildfly实例上的远程EJB时,我遇到了一个问题。我已经按照链接设置了EJB调用。我在不同的服务器实例上部署了两个应用程序(都使用KeyClope进行保护),分别是my-caller.ear和my-callee.ear。结构如下:
**my-caller-app.ear**
|
|-----lib
|-----META-INF
|-----jboss-ejb-client.xml
|-----jboss-app.xml
|-----application.xml
|-----my-web.war
|------ WEB-INF
|----- beans.xml
|----- jboss-web.xml [<security-domain>keycloak</security-domain>]
|----- keycloak.json
|----- web.xml
|---- my-ejb.jar
|---- <org.myapp.ejb.*> // EJB classes
|---- META-INF
|-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
|-----persistence.xml
**my-callee-app.ear**
|
|-----lib
|-----META-INF
|-----jboss-app.xml
|-----application.xml
|-----my-web2.war
|------ WEB-INF
|----- beans.xml
|----- jboss-web.xml [<security-domain>keycloak</security-domain>]
|----- keycloak.json
|----- web.xml
|---- my-ejb2.jar
|---- <org.myapp.ejb.*> // EJB classes
|---- META-INF
|-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
|-----persistence.xml
@Resource(lookup="ejb:my-callee-app-0.0.1-SNAPSHOT/my-ejb2/CalleeBean!com.business.CalleeBeanRemote")
CalleeBeanRemote calleeService;
我对keydepot的standalone.xml配置如下(两台服务器)。另外,默认安全域设置为keydepeat:
<default-security-domain value="keycloak"/>
......
......
<security-domain name="keycloak">
<authentication>
<login-module code="org.keycloak.adapters.jboss.KeycloakLoginModule" flag="required"/>
</authentication>
</security-domain>
......
......
每当我尝试调用远程EJB上的任何方法时,它都会在两个服务器实例上引发以下异常: javax.ejb.EJBAccessException:WFLYSEC0027:无效用户
我在远程服务器(被叫服务器)上启用了跟踪日志记录,如下所示:
**my-caller-app.ear**
|
|-----lib
|-----META-INF
|-----jboss-ejb-client.xml
|-----jboss-app.xml
|-----application.xml
|-----my-web.war
|------ WEB-INF
|----- beans.xml
|----- jboss-web.xml [<security-domain>keycloak</security-domain>]
|----- keycloak.json
|----- web.xml
|---- my-ejb.jar
|---- <org.myapp.ejb.*> // EJB classes
|---- META-INF
|-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
|-----persistence.xml
**my-callee-app.ear**
|
|-----lib
|-----META-INF
|-----jboss-app.xml
|-----application.xml
|-----my-web2.war
|------ WEB-INF
|----- beans.xml
|----- jboss-web.xml [<security-domain>keycloak</security-domain>]
|----- keycloak.json
|----- web.xml
|---- my-ejb2.jar
|---- <org.myapp.ejb.*> // EJB classes
|---- META-INF
|-----jboss-ejb3.xml [<s:security-domain>keycloak</s:security-domain>]
|-----persistence.xml
@Resource(lookup="ejb:my-callee-app-0.0.1-SNAPSHOT/my-ejb2/CalleeBean!com.business.CalleeBeanRemote")
CalleeBeanRemote calleeService;
2017-07-15 19:54:23867跟踪[org.jboss.security](默认任务-47)
PBOX00200:Begin isValid,主体:ejb,缓存项:null 2017-07-15
19:54:23868跟踪[org.jboss.security](默认任务-47)PBOX00209:
defaultLogin,主体:ejb 2017-07-15 19:54:23868跟踪
[org.jboss.security](默认任务-47)PBOX00221:开始
getAppConfigurationEntry(Key斗篷),尺寸:6 2017-07-15 19:54:23868
TRACE[org.jboss.security](默认任务-47)PBOX00224:End
getAppConfigurationEntry(KeyClope),AuthInfo:AppConfigurationEntry[]:
[0]LoginModule类:org.keydove.adapters.jboss.keydove LoginModule
ControlFlag:LoginModuleControlFlag:必需的选项:
2017-07-15 19:54:23868调试[org.jboss.security](默认任务-47)
PBOX00206:登录失败:javax.security.auth.Login.Login异常:
找不到LoginModule类:
org.keydape.adapters.jboss.keydapeloginmodule来自[Module]
来自的“deployment.my-callee-app-0.0.1-SNAPSHOT.ear.my-ejb2.jar:main”
服务模块加载程序]位于
javax.security.auth.login.LoginContext.invoke(LoginContext.java:794)
在
javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
在
javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
在
javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
位于java.security.AccessController.doPrivileged(本机方法)
javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
在
javax.security.auth.login.LoginContext.login(LoginContext.java:587)
在
org.jboss.security.authentication.JBossCachedAuthenticationManager.defaultLogin(JBossCachedAuthenticationManager.java:406)
在
org.jboss.security.authentication.JBossCachedAuthenticationManager.proceedWithJaasLogin(JBossCachedAuthenticationManager.java:345)
在
org.jboss.security.authentication.JBossCachedAuthenticationManager.authenticate(JBossCachedAuthenticationManager.java:333)
在
org.jboss.security.authentication.JBossCachedAuthenticationManager.isValid(JBossCachedAuthenticationManager.java:146)
在
org.jboss.as.security.service.SimpleSecurityManager.authenticate(SimpleSecurityManager.java:406)
在
org.jboss.as.security.service.SimpleSecurityManager.authenticate(SimpleSecurityManager.java:367)
在
org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:55)
在
org.jboss.as.ejb3.security.SecurityContextInterceptor$1.run(SecurityContextInterceptor.java:49)
令人惊讶的是,当我在同一台服务器上部署两个应用程序时,它运行得非常好。
我确信这是远程服务器上的一些安全问题,而不是远程处理问题。我认为keydove保护了我的web层,而不是ejb(不确定)。我陷入这个问题已经有相当一段时间了。
任何帮助都将不胜感激。谢谢您是否也在另一台服务器上安装了KeyClope适配器?@Maddin,我复制了我的wildfly目录以创建另一台服务器。KeyClope适配器在第一台服务器中,所以我假设其他服务器也会有它。。谢谢。你也在另一台服务器上安装了KeyClope适配器吗?@Maddin,我复制了我的wildfly目录来创建另一台服务器。KeyClope适配器在第一台服务器中,所以我假设其他服务器也会有它。。谢谢