在JBoss中使用多个登录模块

ACo*_*der 4 java ejb login jaas jboss7.x

我是认证和安全领域的新手,我正在尝试扩展我的应用程序的身份验证机制,该机制目前提供传统的用户名/密码身份验证,以便用户通过LDAP服务器进行身份验证.

在当前实现中,应用程序使用来自Server API的j_security_check线程来验证用户.所述standalone.xml的JBoss文件具有登录模块指向myLoginModuleClass延伸类jboss.security.auth.spi.UsernamePasswordLoginModule.

<security-domain name="db-domain">
  <authentication>
    <login-module code="myLoginModuleClass" flag="required" module="packageForClass">
      <module-option name="hashAlgorithm" value="SHA-256" />
      <module-option name="hashEncoding" value="base64" />
      <module-option name="password-stacking" value="useFirstPass" />
    </login-module>
  </authentication>
</security-domain>
Run Code Online (Sandbox Code Playgroud)

我在另一个安全性中添加了另一个名为LDAP Login模块的登录模块.

<security-domain name="ldap-domain">
  <authentication>
    <login-module code="LDAPLoginModule" flag="required" module="LDAPModulePackage">
      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
      <module-option name="java.naming.security.authentication" value="simple" />
      <module-option name="bindCredential" value="secret" />
      <module-option name="password-stacking" value="useFirstPass" />
    </login-module>
  </authentication>
</security-domain>
Run Code Online (Sandbox Code Playgroud)

我目前面临的问题如下:jboss-web.xml和项目的web.xml都指向现有的安全域:db-domain.我只能在那里指定一个安全域.问题:如何以编程方式告诉jboss根据用户选择指向特定的登录类,这意味着如果用户选择使用ldap auth,则调用LDAPLoginModule类?或者还有其他更好的方法来进行混合模式身份验证吗?

预先感谢

ACo*_*der 8

与此同时,我找到了一个解决方案.我可以在单个安全域中指定登录模块,并将标志从"required"更改为".

<security-domain name="common-domain">
  <authentication>
    <login-module code="LDAPLoginModule" flag="sufficient" module="LDAPModulePackage">
      <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory" />
      <module-option name="java.naming.security.authentication" value="simple" />
      <module-option name="bindCredential" value="secret" />
      <module-option name="password-stacking" value="useFirstPass" />
    </login-module>

    <login-module code="mydbLoginModuleClass" flag="sufficient" module="packageForClass">
      <module-option name="hashAlgorithm" value="SHA-256" />
      <module-option name="hashEncoding" value="base64" />
      <module-option name="password-stacking" value="useFirstPass" />
    </login-module>

  </authentication>
</security-domain>
Run Code Online (Sandbox Code Playgroud)

通过这样做,jboss安全性将按照在standalone.xml文件(首先是ldap,然后是dblogin)中配置的顺序依次选择登录,并在登录成功时停止


Sam*_*ada 0

我记得一年前研究过类似的问题,但没有找到解决方案。我应用的解决方法是拥有 2 组 jboss-web.xml 文件,一组配置了您的 db 域,一组配置了 ldap 域。当要关闭 LDAP 安全性时,您只需运行一个脚本将 Web xml 替换为 db-domain 1 并重新部署。这是可行的,因为需求是静态的,而不是基于用户输入或动态的。