我在将应用程序从 AS 5.1.0 迁移到 AS 7.2.0 时遇到了另一个问题
我的架构如下所示:
- 一些调用安全远程 ejb 的独立客户端应用程序
- 客户端应用程序传递自定义主体和纯密码进行身份验证
服务器使用自己的 LoginModule(扩展 org.jboss.security.auth.spi.LdapExtLoginModule)
--> 使用 AS 5.1.0 一切正常
- --> 使用 AS 7.2.0 我的自定义 LoginModule 没有从调用客户端获得正确的主体和密码
我试图在这里和其他论坛中的快速启动项目和其他讨论中找到解决方案,但对我没有任何帮助。
如果我在我的 EJB 中禁用安全性,一切正常(但使用未经身份验证的身份)。
我建议我在独立配置或客户端安全实施中犯错,但我已经尝试了所有事情,但我很快就投降了。
谁能给个建议?
服务器包含一个 EJB 项目、一个 API 项目、一个用于安全的 JAR 项目。全部打包在一个 EAR 项目中。
客户端仅包含一个 JAR 项目,也使用服务器 API 和安全项目。
我尝试了以下服务器配置:
拥有用于 EJB 的自定义 LoginModule 的 SecurityDomain + 使用默认“ApplicationRealm”(本地身份验证)保护远程连接器
- 远程 ejb 查找工作正常
- 远程 ejb 方法调用在服务器端调用自定义 LoginModule,但发送错误的 Principal & Password ($local & random-password)
- --> 引发 EJBAccessException:JBAS013323:无效用户
拥有用于 EJB 的自定义 LoginModule 的 SecurityDomain + 使用自己的 Realm 保护远程连接器(使用自己的 LoginModule 的 jaas-authentication)
- 在 ejb 查找期间导致异常并且从不调用自定义 LoginModule(javax.naming.NamingException:无法连接到任何服务器。服务器尝试:[remote://localhost:4447])
拥有用于 EJB 的自定义 LoginModule 的 SecurityDomain + 没有安全性的远程连接器
- 远程 ejb 查找工作正常
- 远程 ejb 方法调用在服务器端调用自定义 LoginModule,但发送错误的主体和密码(匿名和随机密码)
- --> 引发 EJBAccessException:JBAS013323:无效用户
在 JBoss AS 5.1 中,我在客户端向我的主体对象传递了一个密码凭证,如下所示:
final SecurityClient client = SecurityClientFactory.getSecurityClient(JBossSecurityClient.class);
client.setVmwideAssociation(true);
client.setSimple(customPrincipal, plainPass);
client.login();
这适用于 AS 5.1,但在 AS 7.1 中似乎被忽略了。
所以我的问题是如何正确传播主体对象和密码(普通),以便在我的 LoginModule 中使用这些值?