无法从使用keycloak

时间:2017-07-15 15:36:04

标签: java security ejb-3.0 java-ee-7 keycloak


我在调用在同一台机器上运行的另一个Wildfly实例上部署的远程EJB时遇到了问题。我已经按照this链接来设置EJB调用。我有2个应用程序(都使用keycloak保护)说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


我按如下方式注入了我的CalleeBean的远程接口:

@Resource(lookup="ejb:my-callee-app-0.0.1-SNAPSHOT/my-ejb2/CalleeBean!com.business.CalleeBeanRemote")
    CalleeBeanRemote calleeService;


我对keycloak的standalone.xml配置如下(两个服务器)。此外, default-security-domain 设置为 keycloak

<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:无效用户


我在远程服务器(被调用者服务器)上启用了跟踪日志记录,如下所示:

  

2017-07-15 19:54:23,867 TRACE [org.jboss.security](默认任务-47)   PBOX00200:Begin isValid,principal:ejb,cache entry:null 2017-07-15   19:54:23,868 TRACE [org.jboss.security](默认任务-47)PBOX00209:   defaultLogin,principal:ejb 2017-07-15 19:54:23,868 TRACE   [org.jboss.security](默认任务-47)PBOX00221:开始   getAppConfigurationEntry(keycloak),大小:6 2017-07-15 19:54:23,868   TRACE [org.jboss.security](默认任务-47)PBOX00224:结束   getAppConfigurationEntry(keycloak),AuthInfo:AppConfigurationEntry []:   [0] LoginModule类:org.keycloak.adapters.jboss.KeycloakLoginModule   ControlFlag:LoginModuleControlFlag:required选项:

     

2017-07-15 19:54:23,868 DEBUG [org.jboss.security](默认任务-47)   PBOX00206:登录失败:javax.security.auth.login.LoginException:   无法找到LoginModule类:   来自[Module。的org.keycloak.adapters.jboss.KeycloakLoginModule   “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(Native Method)at   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)


令人惊讶的是,当我在同一台服务器上部署我的两个应用程序时,它运行得非常好 我确信这是远程服务器上的一些安全问题,而不是远程问题。我认为keycloak已经保护了我的Web层,而不是EJB(不确定)。我在这个问题上停留了很长一段时间了。
任何帮助将受到高度赞赏。感谢

0 个答案:

没有答案