JBoss 7.1.0 安全域:多个 LDAP——顺序的,不是故障转移

JBoss 7.1.0 Security Domain: Multiple LDAPs--sequential, not failover

到目前为止,我无法找到针对多个 LDAP 服务器进行身份验证的帮助,除了谈论故障转移的地方。

我们有一个供内部用户使用的 LDAP 和一个供外部用户使用的 LDAP。突然间,我们的应用程序需要对内部用户和外部用户都可用。我该如何设置?

这是仅供内部用户使用的当前配置:

<security-domain name="dc-ldap-auth">
    <authentication>
        <login-module code="LdapExtended" flag="required">
            <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
            <module-option name="java.naming.provider.url" value="ldap://dvldap-1.example.com:389"/>
            <module-option name="java.naming.security.authentication" value="simple"/>
            <module-option name="bindDN" value="uid=someid,ou=People,ou=Intranet,o=example.com"/>
            <module-option name="bindCredential" value="somecred"/>
            <module-option name="baseCtxDN" value="ou=People,ou=Intranet,o=example.com"/>
            <module-option name="baseFilter" value="(uid={0})"/>
            <module-option name="rolesCtxDN" value="ou=Groups,ou=Intranet,o=example.com"/>
            <module-option name="roleFilter" value="(uniqueMember={1})"/>
            <module-option name="roleRecursion" value="0"/>
            <module-option name="roleAttributeID" value="cn"/>
            <module-option name="searchScope" value="ONELEVEL_SCOPE"/>
        </login-module>
    </authentication>
</security-domain>

如果您需要简单的配置

只需使用 JAAS 提供的功能即可。将这两个配置添加到登录模块链,并将其中第一个的 flag 设置为 sufficient 值(查看 Configuration class 了解所有选项及其描述)。

为了获得最佳性能:第一个配置应该是用户更频繁地进行身份验证的配置。

<security-domain name="dc-ldap-auth">
    <authentication>
        <login-module code="LdapExtended" flag="sufficient">
            <module-option name="java.naming.provider.url"
                           value="ldap://internal-ldap.my-company.example"/>
            <!-- add other options for the first LDAP server -->
        </login-module>
        <login-module code="LdapExtended" flag="required">
            <module-option name="java.naming.provider.url"
                           value="ldap://external-ldap.my-company.example"/>
            <!-- add other options for the second LDAP server -->
        </login-module>
    </authentication>
</security-domain>

如果您需要出色的性能

如果您能够确定(例如从登录名)您应该在哪个 LDAP 中搜索,那么我建议您实现自己的登录模块。它可以将处理委托给 LdapExtLoginModule 个实例。